首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSInputStream缓冲区的大小

NSInputStream缓冲区的大小
EN

Stack Overflow用户
提问于 2016-10-14 14:29:41
回答 1查看 1.5K关注 0票数 2

我试图使用NSInputStream来使用TCP套接字连接接收数据。在服务器端,我在发送数据本身之前先发送数据大小。在iOS客户端,我需要从NSInputStream中提取前4个字节,因为我需要检查数据大小是否已经完全接收到,但是我有一个问题:

代码语言:javascript
复制
...
case NSStreamEvent.HasBytesAvailable:
 if ( aStream == inputstream){    
   while (inputstream.hasBytesAvailable){                    
      var readBufferRef         = UnsafeMutablePointer<UnsafeMutablePointer<UInt8>>()
      var readBufferLengthRef   = 0
      let readBufferIsAvailable = inputstream.getBuffer(readBufferRef, length: &readBufferLengthRef)
...
    }
}
break

在接收到数据之后,readBufferLengthRef总是等于0。

怎么可能呢?

如何获得NSInputStream缓冲区的大小?

UPD:

代码:

代码语言:javascript
复制
case NSStreamEvent.HasBytesAvailable:
            NSLog("HasBytesAvaible")
            var buffer = [UInt8](count: 1024, repeatedValue: 0)
            if ( aStream == inputstream){

                while (inputstream.hasBytesAvailable){

                    var readBufferRef: UnsafeMutablePointer<UInt8> = nil
                    var readBufferLengthRef = 0
                    let readBufferIsAvailable = inputstream.getBuffer(&readBufferRef, length: &readBufferLengthRef)
                   //debugger: readBufferLengthRef = (int)0
                }
            }
break
EN

回答 1

Stack Overflow用户

发布于 2016-10-14 14:40:12

在您的代码中,readBufferRef被定义为“指向指针的指针”,但从未分配,因此它是空指针。

您应该做的是将UnsafeMutablePointer<UInt8>的地址作为inout参数传递给函数(假设Swift 2):

代码语言:javascript
复制
var readBufferRef: UnsafeMutablePointer<UInt8> = nil
var readBufferLengthRef = 0
let readBufferIsAvailable = inputStream.getBuffer(&readBufferRef, length: &readBufferLengthRef)

返回时,readBufferRef设置为流的读缓冲区(在下一次读取操作之前有效),readBufferLengthRef包含可用字节数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40045665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档