Java сделать копию ридера
-
20-09-2019 - |
Вопрос
У меня есть BufferedReader, просматривающий файл.Когда я сталкиваюсь с конкретным случаем, я хотел бы продолжить цикл, используя другой экземпляр средства чтения, но начиная с этого момента.
Есть идеи по рекомендуемому решению?Создать отдельную читалку, использовать функцию отметки и т.д.?
Решение
Пока жду вашего ответа на мой комментарий, я застрял в предположениях.
Если вам важен построчный ввод, вы можете быть так же приятно удивлены, как и я, обнаружив, что RandomAccessFile
теперь (начиная с версии 1.4 или 1.5) поддерживает readLine
метод.Конечно, RandomAccessFile дает вам детальный контроль над позицией.
Если вам нужен буферизованный ввод-вывод, вы можете рассмотреть возможность обертывания читателя вокруг CharacterBuffer
или, может быть, ByteBuffer
обернутый вокруг файла, сопоставленного с помощью nio
API.Это дает вам возможность рассматривать файл как память с точным контролем указателя чтения.А поскольку все данные находятся в памяти, буферизация включена бесплатно.
Другие советы
Если вы отслеживаете, сколько символов вы уже прочитали, вы можете создать новый BufferedReader и использовать пропускать.
Как отметил Ноэль, вам следует избегать использования BufferedReader.readLine()
, с readLine()
отбросит символы новой строки и сделает подсчет символов неточным.Вероятно, вам не следует рассчитывать на то, что readLine() никогда не будет вызвана, если кому-то еще когда-нибудь придется поддерживать ваш код.
Если вы решите использовать skip
, вам следует написать свой собственный буферизованный Reader, который будет давать вам смещение при подсчете новых строк.