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