Me preguntaba cuál es la mejor manera de hacer que NSOutputStream
redirija a la salida estándar. La técnica que uso en este momento es el uso de un flujo de salida que escribe en la memoria, obtener sus datos e imprimir que a la salida estándar:¿Cómo hacer que NSOutputStream redirija a la salida estándar?
NSOutputStream *stream = [[NSOutputStream alloc] initToMemory];
[stream open];
// calls to stream's -write:maxLengh:
NSData *data = [stream propertyForKey:NSStreamDataWrittenToMemoryStreamKey];
NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
printf("%s", [string UTF8String]);
[stream close];
¿Hay una mejor manera de lograr esto? En concreto, no estoy feliz por dos cosas con este enfoque:
La necesidad de memoria adicional para datos que se escriben para transmitir
Esta corriente no es reutilizable - después de haber recuperado los datos de esta corriente a través del
[stream propertyForKey:NSStreamDataWrittenToMemoryStreamKey]
, la transmisión no se "restablece", es decir, quiero que las llamadas posteriores a este método me den solamente datos nuevos, pero no es el caso. Esto significa que tengo que crear un nuevo NSOutputStream cada vez que escribo en stdout.
Conocí 'NSFileHandle', pero envolverlo dentro de una subclase de' NSOutputStream' no es algo en lo que haya pensado. Muy interesante, y ciertamente debería funcionar. –
Aceptaré su respuesta tan pronto como haya verificado que esto funciona correctamente (sin embargo, no veo nada que vaya mal con esto). –
Esto funciona muy bien. La única advertencia que puedo agregar es que, aparte de anular los métodos de 'NSOutputStream', puede que se requiera anular algunos métodos' NSStream' como '-open' o' -close'. Gracias por la ayuda. –