NSOutputStream
を標準出力にリダイレクトする最良の方法は何ですか?これを達成するためのより良い方法がNSOutputStreamを標準出力にリダイレクトする方法は?
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];
あります:私が今使っている技術は、メモリへの書き込みを行う出力ストリームを使用してデータを取得し、その標準出力に印刷しているのですか?具体的には、私はこのアプローチには二つのことについて満足していない:
このストリームストリームに書き込まれたデータのための余分なメモリの必要性が再利用可能ではありません - 私はからデータを取得した後、このストリームは
[stream propertyForKey:NSStreamDataWrittenToMemoryStreamKey]
経由で、ストリームは「リセット」されません。つまり、このメソッドへの後続の呼び出しで、私に新しいデータのみを渡しますが、そうではありません。つまり、stdoutに書き込むたびに新しいNSOutputStreamを作成する必要があります。
私は 'NSFileHandle'について知っていましたが、' NSOutputStream'のサブクラスの中にそれをラップすることは、私が考えたものではありません。非常に興味深い、それは確かに動作するはずです。 –
私はこれが正しく動作することを確認したらすぐにあなたの答えを受け入れます(私はこれでも間違っているはずの何も見ません)。 –
これはとてもうまく動作します。私が追加できる唯一の注意点は、 'NSOutputStream'のメソッドをオーバーライドするだけでなく、' -open'や '-close'のようないくつかのNSStreamメソッドをオーバーライドする必要があるかもしれません。助けてくれてありがとう。 –