Вопрос может быть общим, но я пытаюсь понять основные последствия здесь.
Я пытаюсь выполнить некоторую разработку байт-кода с использованием библиотеки BCEL, и часть рабочего процесса требует, чтобы я читал один и тот же файл байт-кода несколько раз (с самого начала). Поток следующий
// 1. Get Input Stream
// 2. Do some work
// 3. Finish
// 4. Do some other work.
На шаге 4 мне нужно будет сбросить метку или получить поток, как будто он с самого начала. Я знаю следующие варианты.
1) Оберните поток, используя BufferedInputStream
- шанс получить "Сброс до недопустимой отметки" IOException
2) Оберните его с помощью ByteArrayInputStream - он всегда работает, хотя некоторые онлайн-исследования показывают, что это ошибочно?
3) Просто вызовите getInputStream()
, если мне нужно снова прочитать из потока.
Я пытаюсь понять, какой вариант будет лучше для меня. Я не хочу использовать BufferedInputStream, потому что я понятия не имею, где вызывается последний mark
, поэтому вызов reset
для более высокой позиции отметки вызовет IOException. Я бы предпочел использовать ByteArrayInputStream, поскольку для меня требуется минимальное изменение кода, но может ли кто-нибудь подсказать, какой вариант № 2 или вариант № 3 будет лучше?
Я знаю, что реализации для mark() и reset() различны для ByteArrayInputStream
и BufferedInputStream
в JDK.
С Уважением
File
, который превращается в файл.class
? почему бы не прочитать его один раз и не сохранить, например, в массиве байтов? - person Eugene   schedule 20.11.2017ByteArrayInputStream
должен правильно сбросить его обратно в позицию 0 (я имею в виду начало) потока, если я хочу перезапустить? то есть не должно быть никакого ошибочного поведения (потому что я пока ни с чем не сталкивался)? - person ha9u63ar   schedule 20.11.2017