2016-12-22 12 views
0

입력 스트림을 문자열로 변환하려고합니다. 변환하려는 입력 스트림은 NSURLRequest.HTTPBodyStream입니다. 분명히 httpbody는 null로 설정되고 요청을 한 후에 스트림으로 대체됩니다. 어떻게해야합니까? 이것은 내가 지금까지 가지고있는 것입니다 :NSInputStream을 NSString으로 변환하는 방법 또는 NSInputStream을 읽는 방법

#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이 인쇄되지 않습니다. 어떤 제안?

답변

2

알 수 있습니다. 내가 액세스하려고 시도한 스트림이 열리지 않았습니다. 그 당시에도 읽기 전용이었습니다. 그래서 나는 그것의 사본을 만들고 그것을 열었다. 이것은 여전히 ​​옳지 않았지만 한 번에 한 바이트 씩 읽었습니다 (단일 문자).

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); 
} 
+1

당신은 https://stackoverflow.com/questions/41293656/objc-exc-bad-access-when-setting에서 여기 같은'byteBuffer' 크기 수정을 할 수 있습니다 : 그래서 여기에 최종 솔루션입니다 -a-nsstring-equal-to-another; 다른 사람들이이 대답을 볼 때 이런 식으로 혼란 스럽거나 깨진 코드를 복사하지 않습니다. –

+0

네가 맞아, 내가 나중에 알아 냈기 때문에 실제로 실수가 있었어. 지적 해 주셔서 고맙습니다. – Minimi