Если вы читаете Stream в массив буферов, ваше смещение и длина всегда должны быть:
offset = 0;
len = buffer.length();
Эти параметры указывают, где данные помещаются в буфер, а НЕ какие данные считываются из потока. Поток читается непрерывно (или как это пишется?)!
Если вы всегда звоните:
buffer = new byte[256];
dis.read(buffer, 0, 256);
Это произойдет:
Перед первым вызовом Streamposition (позиция следующего возвращаемого байта) равна 0.
- Streamposition после call = 256 и буфер содержит байты 0-255
- Streamposition после call = 512 и буфер содержит байты 256-511
...
dis.reset ();
Streamposition снова равен 0.
Этот код считывает только байты 256-511 из потока в буфер:
byte[] buffer = new byte[512];
dis.skip(256);
dis.read(buffer, 0, 256);
Обратите внимание, что последние 256 байтов буфера не заполнены. Это одно из различий между read (byte [], int, int) и read (byte [])!
Вот несколько ссылок для вас, которые описывают концепцию потока и использование метода read:
чтение ()
Streams