2015-04-12 3 views
0
 int a = bis.available(); 
     System.out.println("*****"+a); 
     bis.skip(10000); 
     a = bis.available(); 
     System.out.println("*****"+a); 
     bis.skip(10000); 
     a = bis.available(); 
     System.out.println("*****"+a); 

Выход:метод пропуска в классе BufferedInputStream не пропуская ровно п байт

*****369608 
*****361424 
*****351424 

Когда я использую пропуск, если я пытаюсь пропустить 10000, то это будет только пропустить 8184 байт. Если я снова это сделаю, на этот раз он будет работать нормально.

ответ

1

Это работает как указано. Из spec:

Метод пропуском может, по целому ряду причин, в конечном итоге пропуская некоторое меньшее число байтов, возможно, 0. [...] Фактическое число байтов пропускаемых возвращается.

+0

Так что мне нужно использовать это возвращаемое значение, чтобы вычислить новое значение, которое мне нужно пропустить снова, правильно ли? Почему это произошло .. – G1ooom

+0

Исправить. Что касается того, почему он ведет себя так: я не знаю, и спецификация расплывчата по этому поводу («множество причин»). Если я должен угадать, я бы сказал, вероятно, какую-то оптимизацию производительности. – duckstep

+0

Большое спасибо. – G1ooom

0

Ваш тест ничего не доказывает, потому что вы неправильно используете available(). В Javadoc есть специальное предупреждение против, использующее его как количество байтов, возвращающихся в поток. Это не то, для чего.

Смежные вопросы