NSOutputStream outputStreamToBuffer不符合docs?

时间:2013-12-01 22:46:01

标签: ios objective-c

我正在开发基于网络的iOS应用,使用测试驱动开发。现在,我在测试写入输出流的方法时遇到了麻烦。我需要我的测试来验证在下一个NSStreamHasSpaceAvailable事件中是否恢复了不完整的写入。我认为在设置低于正在写入的数据长度的容量时,使用[NSOutputStream outputStreamToBuffer: capacity:]是合适的。

documentation州:

  

当写入缓冲区的字节数达到容量时,流的streamStatus将返回NSStreamStatusAtEnd。

然而,这不是我所经历的。当我尝试超过流容量的写入时,write的返回值为-1,并且流处于错误状态(NSStreamStatusError)。打印streamError会出现以下错误:

Stream error: Error Domain=NSPOSIXErrorDomain Code=12 "The operation couldn’t be completed. Cannot allocate memory"

如果我限制尝试的写入与流容量匹配,则写入本身按预期工作,但streamStatus仍然返回NSStreamStatusOpen而不是NSStreamStatusAtEnd

我错过了什么,或者这是一个错误?到目前为止我只在模拟器中尝试过它(OS X 10.9,Xcode 5.0.2,iOS 7模拟器)。

要重现的示例代码:

- (void)testOutputStreamStuff
{
    uint8_t buf[10];
    NSOutputStream *stream = [NSOutputStream outputStreamToBuffer:buf capacity:10];
    [stream open];
    NSLog(@"Stream status: %u", [stream streamStatus]);
    NSData *data = [@"Just creating some data" dataUsingEncoding:NSUTF8StringEncoding];
    NSUInteger bytesWritten = [stream write:[data bytes] maxLength:[data length]];
    NSLog(@"Bytes written: %i", bytesWritten);
    NSLog(@"Stream error: %@", [stream streamError]);
    NSLog(@"Stream status: %u", [stream streamStatus]);
}

上面的NSLog语句的输出是:

Stream status: 2
Bytes written: -1
Stream error: Error Domain=NSPOSIXErrorDomain Code=12 "The operation couldn’t be completed. Cannot allocate memory"
Stream status: 7

据我从文档中了解,预期输出应为:

Stream status: 2
Bytes written: 10
Stream error: (NULL)
Stream status: 5

任何帮助表示赞赏!甚至是对输出流进行单元测试的替代方法,但我想这是一个针对不同问题的主题。 :)

更新:我在iOS 4上在iPhone 4上尝试了相同的结果。至于单元测试,我通过继承NSOutputStream并强制它达到所需的行为来解决它。关于原始问题的一些反馈仍然很好。

更新2:我现在已经在运行iOS 6.1.3的iPhone 4以及OS X 10.9上进行了测试。两者的结果与上述相同,因此不是特定于操作系统。

0 个答案:

没有答案