如何将 NSInputStream 转换为 NSString 或如何读取 NSInputStream [英] How to convert NSInputStream to NSString or how to read NSInputStream
问题描述
我正在尝试将我的输入流转换为字符串.我试图转换的输入流是 NSURLRequest.HTTPBodyStream,显然 httpbody 设置为 null 并在您发出请求后替换为流.我该怎么做?这是我目前所拥有的:
I'm trying to convert my input stream to a string. The input stream I'm trying to convert is NSURLRequest.HTTPBodyStream, apparently the httpbody is set to null and replaced with the stream after you make the request. how do I go about doing this? This is what I have so far:
#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.有什么建议吗?
When I print the string it's either always empty or contains a single character, doesn't even print null. Any suggestions?
推荐答案
明白了.我尝试访问的流尚未打开.即便如此,它也是只读的.所以我复制了它,然后打开它.但这仍然不对,我一次只读取一个字节(一个字符).所以这是最终的解决方案:
Got it. The stream that I tried to access hadn't been opened. Even then, it was read only. So I made a copy of it and then opened it. This still wasn't right though, I was only reading a byte at a time (a single character). So here's the final solution:
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);
}
这篇关于如何将 NSInputStream 转换为 NSString 或如何读取 NSInputStream的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!