Я думаю, вы не понимаете, что делает mark
.
Цель mark
состоит в том, чтобы заставить поток запомнить его текущую позицию, чтобы вы могли вернуться к нему позже, используя reset()
. Аргумент не в том, сколько байтов будет прочитано следующим, а в том, сколько байтов вы сможете прочитать после того, как метка будет считаться недействительной (т.е. вы не сможете reset()
вернуться к ней; либо получит исключение, либо закончится в начале потока).
Подробнее см. документы по InputStream . Методы mark
читателей работают аналогично.