Ios 如何将NSInputStream转换为NSString或如何读取NSInputStream

Ios 如何将NSInputStream转换为NSString或如何读取NSInputStream,ios,objective-c,nsinputstream,Ios,Objective C,Nsinputstream,我正在尝试将输入流转换为字符串。我试图转换的输入流是NSURLRequest.HTTPBodyStream,显然httpbody被设置为null,并在发出请求后替换为流。我该怎么做呢?这就是我到目前为止所做的: #define MAX_UTF8_BYTES 6 NSString *utf8String; NSMutableData *_data = [[NSMutableData alloc] init]; //for easy 'appending' bytes in

我正在尝试将输入流转换为字符串。我试图转换的输入流是NSURLRequest.HTTPBodyStream,显然httpbody被设置为null,并在发出请求后替换为流。我该怎么做呢?这就是我到目前为止所做的:

#define MAX_UTF8_BYTES 6
    NSString *utf8String;
    NSMutableData *_data = [[NSMutableData alloc] init]; //for easy 'appending' bytes

    int bytes_read = 0;
    while (!utf8String) {
        if (bytes_read > MAX_UTF8_BYTES) {
            NSLog(@"Can't decode input byte array into UTF8.");
            break;
        }
        else {
            uint8_t byte[1];
            [r.HTTPBodyStream read:byte maxLength:1];
            [_data appendBytes:byte length:1];
            utf8String = [NSString stringWithUTF8String:[_data bytes]];
            bytes_read++;
        }
    }

当我打印字符串时,它要么总是空的,要么只包含一个字符,甚至不打印null。有什么建议吗?

明白了。我试图访问的流尚未打开。即使在那时,它也是只读的。所以我复制了一份,然后打开了它。但这仍然不对,我一次只读取一个字节(一个字符)。最后的解决方案是:

NSInputStream *stream = r.HTTPBodyStream;
uint8_t byteBuffer[4096];

[stream open];
if (stream.hasBytesAvailable)
{
    NSLog(@"bytes available");
    NSInteger bytesRead = [stream read:byteBuffer maxLength:sizeof(byteBuffer)]; //max len must match buffer size
    NSString *stringFromData = [[NSString alloc] initWithBytes:byteBuffer length:bytesRead encoding:NSUTF8StringEncoding];

    NSLog(@"another pathetic attempt: %@", stringFromData);
}

您可能希望在此处进行与中相同的
byteBuffer
大小修正;这样,当其他人看到这个答案时,他们不会感到困惑/不会复制损坏的代码。是的,你是对的,我确实有错误,因为我后来发现了。谢谢你指出这一点