нужна помощь при написании NSData для вывода потока с использованием NSStream в цели c - PullRequest
1 голос
/ 21 октября 2010

Я использую следующий код, который записывает файл из пути в выходной поток, но каждый раз, когда я запускаю код, он всегда записывает 131768 байтов в поток относительно размера моего файла (8 МБ или 5 МБ или т. Д.).Может кто-нибудь проверить меня?Кажется, я не могу найти проблему.Или у него есть другие способы сделать это?Я использую 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 Ответ

2 голосов
/ 21 октября 2010

Это дубликат Как использовать сообщение записи NSOutputStream? , не то чтобы я удивился, что вы его не нашли.

Итог; метод write:maxLength: не обязательно записывает все данные, которые вы передаете, все сразу. Это связано с буферизацией, и, следовательно, вам, вероятно, потребуется зациклить запись данных, поскольку в выходном потоке доступно пространство.

Обратите внимание, что под "петлей" я не подразумеваю "опрос".

...