in the Ray Wenderlich 套接字教程 http://www.raywenderlich.com/3932/networking-tutorial-for-ios-how-to-create-a-socket-based-iphone-app-and-server为了从 Objective-C 中的输入流读取字节,我们做了
uint8_t buffer[1024];
int len;
while ([inputStream hasBytesAvailable]) {
len = [inputStream read:buffer maxLength:sizeof(buffer)];
if (len > 0) {
NSString *output = [[NSString alloc] initWithBytes:buffer length:len encoding:NSASCIIStringEncoding];
if (nil != output) {
NSLog(@"server said: %@", output);
}
在 Swift 中我尝试了以下方法但没有取得太大成功
if (stream == inputStream) {
// var buffer = Array<UInt8>(count: 1024, repeatedValue: 0)
var buffer : UnsafeMutablePointer<UInt8>
var len : Bool
while (inputStream?.hasBytesAvailable == true) {
len = inputStream?.getBuffer(buffer, length: sizeofValue(buffer))
if (len) {
var output = String(NSString(bytes: buffer, length: sizeofValue(buffer), encoding: NSASCIIStringEncoding))
}
}
}
您可以使用Array<UInt8>
作为缓冲区并按原样传递记录在使用 Swift 与 Cocoa 和 Objective-C 中 https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithCAPIs.html#//apple_ref/doc/uid/TP40014216-CH8-XID_15:
let bufferSize = 1024
var buffer = Array<UInt8>(count: bufferSize, repeatedValue: 0)
let bytesRead = inputStream.read(&buffer, maxLength: bufferSize)
if bytesRead >= 0 {
var output = NSString(bytes: &buffer, length: bytesRead, encoding: NSUTF8StringEncoding)
} else {
// Handle error
}
-[NSInputStream read:maxLength:]
返回一个数字,指示读取了多少字节(如果 >= 0)或是否存在错误(如果为负)。您应该相应地检查返回值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)