仅限SWIFT - 从NSInputStream读取

13

请问您如何才能正确地从NSInputStream中读取内容?

我不太理解UnsafePointer是什么,以及它的用途(还有UnsafeArray)。

NSInputStream的read函数会得到一个CMutablePointer对象,该对象可以被UnsafePointer填充。

相比Java的Streams来说,这真的很混乱。

你有什么建议吗?

谢谢!


2
如果那是一团糟,请不要与Java进行比较,相反请阅读Swift的基础知识:https://developer.apple.com/swift/resources/ - holex
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"

解释: read 方法签名: stream.read(<#buffer: UnsafeMutablePointer#>, maxLength: <#Int#>)

该方法的第一个参数是一个 UnsafeMutablePointer,这意味着该方法希望得到一个类型为 UInt8 的数组的指针 - 而不是数组本身

因此,在变量 buffer 的名称前面添加 & 符号。 &buffer == 名为 buffer 的 UInt8 数组对象的指针。


在文档中很难找到使用&运算符与数组一起使用会返回UnsafeMutablePointer<UInt8>的信息。如果没有这个知识,想要弄清楚如何做你所做的事情就非常困难。因此,谢谢! - Michael Welch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接