Получить 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];