@134-png

Почему методы или код работают не так?

Как я понял из объяснений из других источник о методах mark и reset, мой код должен выводить: 1 4 2 6 2 6 3 -1. Вместо этого он выводит: 1 4 2 6 2 6 2 6 2 6...Что не так объясните, пожалуйста.
ByteArrayInputStream dime = new ByteArrayInputStream(new byte[]{
            1, 4, 2, 6, 3
        });
        
        
        for(int i = 0; i != -1;){
            
            i = dime.read();
            
            if(i == 4) dime.mark(6);
            
            else if(i == 6) dime.reset();
            
            System.out.print(i + " ");
        }
  • Вопрос задан
  • 47 просмотров
Решения вопроса 1
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
Непонятно, почему ты так решил. Скорее всего, ты считаешь, что вызвав reset, ты "убираешь" пометку с позиции. Но это не так, в контракте reset этого нет.
If such an IOException is not thrown, then the stream is reset to a state such that all the bytes read since the most recent call to mark (or since the start of the file, if mark has not been called) will be resupplied to subsequent callers of the read method

Поэтому ты каждый раз ресетишь стрим на помеченную позицию, и всё зацикливается.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы