NIOを使用してプロセスからstdoutを処理することはできますか?私はjava.ioを使って作業していますが、これはNIOについてもう少し学び、パフォーマンスの向上の可能性を探る練習の一環です。Process stdout InputStreamをNIO ByteBufferに読み込むことはできますか?
基本的には、大量のテキストをブロックせずにできるだけ速くstdoutからバッファにストリーミングして、そのバッファの内容を後で処理したいとします。問題は、NIOとうまく連携するための正しいブードゥーを理解できないようです。
class StreamConsumer implements Runnable
{
private InputStream is;
public StreamConsumer(InputStream is)
{
this.is = is;
}
public void run()
{
try
{
ReadableByteChannel source = Channels.newChannel(is);
// Is it possible get a channel to a ByteBuffer
// or MappedByteBuffer here?
WritableByteChannel destination = ??;
ByteBuffer buffer = ByteBuffer.allocateDirect(128 * 1024);
while (source.read(buffer) != -1)
{
buffer.flip();
while (buffer.hasRemaining())
{
destination.write(buffer);
}
buffer.clear();
}
source.close();
destination.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
は、あなたは、単に一度に単一バイトのバッファ内のすべての標準入力を持つようにしたいですか?あなたは入力ストリームの最大長を知っていますか? –
私は一度にすべてをバッファーに読み込みたいですが、長さは不明です。しかし、典型的には10MBの範囲である。 – Rob