Вопрос

У меня есть BufferedReader, просматривающий файл.Когда я сталкиваюсь с конкретным случаем, я хотел бы продолжить цикл, используя другой экземпляр средства чтения, но начиная с этого момента.

Есть идеи по рекомендуемому решению?Создать отдельную читалку, использовать функцию отметки и т.д.?

Это было полезно?

Решение

Пока жду вашего ответа на мой комментарий, я застрял в предположениях.

Если вам важен построчный ввод, вы можете быть так же приятно удивлены, как и я, обнаружив, что RandomAccessFile теперь (начиная с версии 1.4 или 1.5) поддерживает readLine метод.Конечно, RandomAccessFile дает вам детальный контроль над позицией.

Если вам нужен буферизованный ввод-вывод, вы можете рассмотреть возможность обертывания читателя вокруг CharacterBuffer или, может быть, ByteBuffer обернутый вокруг файла, сопоставленного с помощью nio API.Это дает вам возможность рассматривать файл как память с точным контролем указателя чтения.А поскольку все данные находятся в памяти, буферизация включена бесплатно.

Другие советы

Вы посмотрели BufferedReader's mark метод?Используется совместно с reset это может удовлетворить ваши потребности.

Если вы отслеживаете, сколько символов вы уже прочитали, вы можете создать новый BufferedReader и использовать пропускать.

Как отметил Ноэль, вам следует избегать использования BufferedReader.readLine(), с readLine() отбросит символы новой строки и сделает подсчет символов неточным.Вероятно, вам не следует рассчитывать на то, что readLine() никогда не будет вызвана, если кому-то еще когда-нибудь придется поддерживать ваш код.

Если вы решите использовать skip, вам следует написать свой собственный буферизованный Reader, который будет давать вам смещение при подсчете новых строк.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top