Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NSInputStream缓冲区的大小_Ios_Swift_Xcode - Fatal编程技术网

Ios NSInputStream缓冲区的大小

Ios NSInputStream缓冲区的大小,ios,swift,xcode,Ios,Swift,Xcode,我正在尝试使用NSInputStream通过TCP套接字连接接收数据。在服务器端,我先发送数据大小,然后再发送数据本身。在iOS客户端,我需要从NSInputStream中提取前4个字节,因为我需要检查数据大小是否已完全接收,但我有一个问题: ... case NSStreamEvent.HasBytesAvailable: if ( aStream == inputstream){ while (inputstream.hasBytesAvailable){

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

...
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
。。。
案例nsstreamvent.hasbytes可用:
如果(aStream==inputstream){
while(inputstream.hasBytesAvailable){
var readBufferRef=unsafemeutablepointer()
变量readBufferLengthRef=0
让readBufferIsAvailable=inputstream.getBuffer(readBufferRef,长度:&readBufferLengthRef)
...
}
}
打破
接收数据后,readBufferLengthRef始终等于0

怎么可能

如何获取NSInputStream缓冲区的大小

UPD:

代码:

case nsstreamvent.hasbytes可用:
NSLog(“hasbytesavailable”)
变量缓冲区=[UInt8](计数:1024,重复值:0)
if(aStream==inputstream){
while(inputstream.hasbytes可用){
var readBufferRef:UnsafeMutablePointer=nil
变量readBufferLengthRef=0
让readBufferIsAvailable=inputstream.getBuffer(&readBufferRef,长度:&readBufferLengthRef)
//调试器:readBufferLengthRef=(int)0
}
}
打破

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

你应该做的是传递一个
unsafemeutablepointer
作为函数的inout参数 (假设Swift 2):

var readBufferRef:UnsafeMutablePointer=nil
变量readBufferLengthRef=0
让readBufferIsAvailable=inputStream.getBuffer(&readBufferRef,长度:&readBufferLengthRef)
返回时,
readBufferRef
设置为流的读取缓冲区(在下一次读取操作之前有效),并且
readBufferLengthRef
包含
可用字节数。

感谢您的关注和回答!不幸的是,我仍然无法获得
readBufferLengthRef
中的字节数。你们可以在我的问题的UPD部分检查完整的代码段。我想这会有帮助哇。。。怎么可能呢?也许我需要检查一下别的东西?
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
var readBufferRef: UnsafeMutablePointer<UInt8> = nil
var readBufferLengthRef = 0
let readBufferIsAvailable = inputStream.getBuffer(&readBufferRef, length: &readBufferLengthRef)