在目标c中使用NSStream将NSData写入输出流所需的帮助

时间:2010-10-21 03:55:29

标签: iphone objective-c nsstream

我使用以下代码将文件从路径写入输出流,但每次运行代码时,它总是将131768字节写入流文件大小(8MB或5MB等)。有人可以帮我查一下吗?我似乎无法找到问题。还是有其他方法可以做到这一点?我正在使用带有以下代码的NSStream:

NSString *filesContent = [[NSString alloc] initWithContentsOfFile:myMediaFile];           // myMediaFile is a path to my file eg. .../Documents/myvideo.mp4/

NSData *data = [ filesContent dataUsingEncoding:NSASCIIStringEncoding        allowLossyConversion:YES];

const uint8_t *buf = [data bytes];

NSUInteger length = [data length];
 NSLog(@"datalen = %d",length);
 NSInteger nwritten = [outputStream write:buf maxLength:length];

 if (-1 == nwritten) {
  NSLog(@"Error writing to stream %@: %@", outputStream, [outputStream streamError]);
 }else{
  NSLog(@"Wrote %ld bytes to stream %@.", (long long)nwritten, outputStream);
 }

1 个答案:

答案 0 :(得分:2)

这是How to use NSOutputStream's write message?的副本,并不是因为没有找到那个而感到惊讶。

底线; write:maxLength:方法不一定会写入您传递给它的所有数据。涉及缓冲,因此,当输出流上有空间时,您可能需要循环写入数据。

请注意,通过“循环”,我不是指“民意调查”。