13

NSInputStream から適切に読み取る方法を教えてください。

UnsafePointer とは何か、それが何に使用されるのか (UnsafeArray についても) 理解できませんでした。

NSInputStream 読み取り関数は、UnsafePointer オブジェクトで満たすことができる CMutablePointer を取得します。

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 に答える