Я новичок в Java и в настоящее время делаю некоторые эксперименты на нем.
Я написал небольшую программу, которая читает и записывает поток ввода-вывода STD, но я
продолжал получать исключения за пределы диапазона. Вот мой код
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];
}
Вот сгенерированное исключение: «Исключение в потоке» main »java.lang.IndexOutOfBoundsException
at java.io.BufferedInputStream.read (BufferedInputStream.java:327)
at JavaPigz.main (JavaPigz.java:73) "
73-й столбец - это оператор inStream.read (...). По сути, я хочу прочитать 128 килобайт байтов из stdin один раз, записать его в стандартный вывод и вернуться к чтению другого фрагмента 128 килобайт, и так далее, и тому подобное. Это же исключение также выдается outStream.write ()
Я выполнил некоторую отладку и, похоже, буферы BufferedInputStream не превышают порцию по 64 КБ. Не знаю, правда ли это. Спасибо.
Редактировать: я тоже пытался делать
InputStream inStream = new BufferedInputStream (System.in, BLOCKSIZE);
указать размер буферизованного фрагмента, который я хочу. Но оказывается, что он продолжает давать размер 64 КБ
независимо от того, что указано