8 Stimmen

Erhalten Sie NSData aus einem NSOutputStream im Speicher?

Ich möchte einen NSOutputStream verwenden, um Daten zu akkumulieren, und dann, wenn fertig, ein NSData-Objekt mit dem Inhalt erstellen. Ich kann das tun, wenn der Ausgabestream auf einer Datei basiert, wie folgt:

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];

// füllen Sie den Ausgabestrom hier

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

Ich möchte, dass die Variable 'contents' gefüllt wird, ohne dass die temp-Datei erstellt wird. Kann ich das alles im Speicher erledigen? Ich sehe keine entsprechende API in der NSOutputStream-Dokumentation.

17voto

joseph.hainline Punkte 23241

Gemäß der schwer zu findenden Dokumentation, initialisieren Sie zuerst den Ausgabestrom mit Memory und rufen dann die Methode propertyForKey mit dem Schlüssel NSStreamDataWrittenToMemoryStreamKey auf.

Für Ihr Beispiel:

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

// Füllen Sie den Ausgabestrom irgendwie

NSData *contents = [outputStream propertyForKey:NSStreamDataWrittenToMemoryStreamKey];
[outputStream close];

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X