私はJavaを初めて使用し、現在Javaでいくつかの実験を行っています。std I / Oのストリームの読み取りと書き込みを行う小さなプログラムを作成しましたが、範囲外で例外がスローされ続けました。これが私のコードです
int BLOCKSIZE = 128*1024;
InputStream inStream = new BufferedInputStream(System.in);
OutputStream outStream = new BufferedOutputStream(System.out);
byte[] buffer = new byte[BLOCKSIZE];
int bytesRead = 0;
int writePos = 0;
int readPos = 0;
while ((bytesRead = inStream.read(buffer,readPos,BLOCKSIZE)) != -1) {
outStream.write(buffer,writePos,BLOCKSIZE);
readPos += bytesRead;
writePos += BLOCKSIZE;
buffer = new byte[BLOCKSIZE];
}
スローされる例外は次のとおりです。「JavaPigz.main(JavaPigz.java:73)のjava.io.BufferedInputStream.read(BufferedInputStream.java:327)のスレッド"main"java.lang.IndexOutOfBoundsExceptionの例外」
73番目の列はinStream.read(...)ステートメントです。基本的に、stdinから128kbバイトを一度読み取り、それをstdoutに書き込んでから、別の128kbチャンクを読み取るために戻ります。同じ例外がoutStream.write()にもスローされます
デバッグを行ったところ、BufferedInputStreamバッファーは最大64kbのチャンクになっているように見えます。これが本当かどうかわからない。ありがとうございました。
編集:InputStream inStream = new BufferedInputStream(System.in、BLOCKSIZE);も試してみました。必要なバッファチャンクのサイズを指定します。しかし、何が指定されていても、64kbのサイズを提供し続けることがわかりました