Существует ли класс, предоставляющий небуферизованный метод readLine в Java?

Я очищаю некоторые фрагменты нашей кодовой базы на работе, и один из старых классов используется для чтения и записи данных. Эти данные представляют собой смесь строк в кодировке US -ASCII и примитивов в двоичной кодировке.

Текущая реализация использует DataInputStream , но, как видно из документации, метод readLine()устарел из-за проблемы, связанной с преобразованием байтов в символы. Хотя эта проблема с кодировкой на самом деле не возникла для нас, устаревание является проблемой, поскольку она уже не работает в какой-то версии OpenJDK 7, а устаревание означает, что в будущем она может быть полностью удалена. «Официальной» альтернативой является использование readLineиз BufferedReader , но мы не можем выполнить полную замену -с помощью DataInputStream, поскольку BufferedReader не может реально обрабатывать двоично-закодированные примитивы.

Проблема с «смешением» этих двух классов заключается в том, что когда BufferedReader буферизует поток, он перемещает маркер потока. Это означает, что последующие вызовы таких методов, как readDouble()из DataInputStream, завершатся ошибкой с IOExceptions или EOFExceptions, поскольку реальное расположение маркера потока не там, где оно "должно" быть в контексте логики приложения.

Я изучил какую-то хакерскую стратегию mark()/reset(), но иногда поток поддерживается FileInputStream, который не поддерживает mark()/reset().

Помимо изменения нашего протокола данных для записи примитивов в виде символов или написания моей собственной реализацииreadLine()(что на удивление не -тривиально ), есть ли способ добиться этого? На данный момент я даже готов рассмотреть внешнюю библиотеку.

6
задан Doug Stephen 4 July 2012 в 15:14
поделиться