1

パスから出力ストリームにファイルを書き込む次のコードを使用していますが、コードを実行するたびに、ファイル サイズ (8MB または 5MB など) に関して常に 131768 バイトがストリームに書き込まれます。誰かチェックしてくれませんか?問題が見つからないようです。それとも他の方法がありますか?次のコードで 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);
 }
4

1 に答える 1

2

これは、NSOutputStreamの書き込みメッセージの使用方法の複製です。、あなたがそれを見つけられなかったことに私は驚いていません。

結論; このwrite:maxLength:メソッドは、渡したすべてのデータを一度に書き込む必要はありません。バッファリングが関係しているため、出力ストリームに空きがあるため、データの書き込みをループする必要があります。

「ループ」とは、「ポーリング」を意味するものではないことに注意してください。

于 2010-10-21T04:30:01.087 に答える