Получить NSData из NSOutputStream в памяти?

Я хочу использовать NSOutputStream для накопления данных, а затем, когда закончите, создайте объект NSData с содержимым. Я могу сделать это, когда поток вывода основан на файле, следующим образом:

NSString *tmpDirectory = NSTemporaryDirectory();
NSString *filePath = [tmpDirectory stringByAppendingPathComponent:@"tempfile"];
[[NSFileManager defaultManager] createFileAtPath:filePath contents:nil attributes:nil];
NSOutputStream *outputStream = [[NSOutputStream alloc] initToFileAtPath:filePath append:NO];     [outputStream open];

// fill the output stream here

NSData *contents = [NSData dataWithContentsOfFile:filePath];
[outputStream close];

Я хочу, чтобы переменная содержимого была заполнена без создания временного файла. Могу ли я сделать все это в памяти? Я не вижу API для этого в документации NSOutputStream.

1 ответ

Решение

В соответствии с труднодоступной документацией, сначала инициируйте выходной поток с памятью, затем вызовите метод propertyForKey с ключом NSStreamDataWrittenToMemoryStreamKey.

Для вашего примера:

NSOutputStream *outputStream = [[NSOutputStream alloc] initToMemory];
[outputStream open];

// fill the output stream somehow

NSData *contents = [outputStream propertyForKey:NSStreamDataWrittenToMemoryStreamKey];
[outputStream close];
Другие вопросы по тегам