13

你能解释一下如何从 NSInputStream 中正确读取吗?

我不明白什么是 UnsafePointer 以及它的用途(也适用于 UnsafeArray)。

NSInputStream 读取函数获取一个 CMutablePointer,它可以用 UnsafePointer 对象填充。

与 Java 的 Streams 相比,这真是一团糟。

你会推荐什么 ?

谢谢!

4

1 回答 1

23

我自己已经弄清楚了。

看看这个简单的代码:

let data: NSData = "Jonathan Yaniv.".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)
let stream: NSInputStream = NSInputStream(data: data)

var buffer = [UInt8](count: 8, repeatedValue: 0)

stream.open()

if stream.hasBytesAvailable {
    let result :Int = stream.read(&buffer, maxLength: buffer.count)
}

//  result = 8 -- because of the size of the buffer.
//  buffer contains the first 8 bytes repreenting the word "Jonathan"

说明:读取方法签名:stream.read(<#buffer: UnsafeMutablePointer#>, maxLength: <#Int#>)

它获取一个 UnsafeMutablePointer 作为第一个参数,这意味着该方法期望获取一个指向 UInt8 类型数组的 POINTER - 而不是数组本身

因此,我们在缓冲区变量的名称前添加了 & 符号。&buffer == 指向名为 buffer 的 UInt8 数组对象的指针。

于 2014-08-13T11:15:42.423 回答