是否有一个类在Java中公开了一个无缓冲的readLine方法?

Dou*_*hen 6 java io readline bufferedreader datainputstream

我正在清理工作中的一些代码库,其中一个较旧的类用于读写数据.该数据是US-ASCII编码的字符串和二进制编码的基元的混合.

当前实现使用DataInputStream,但正如您在文档中看到的那样,该readLine()方法已被弃用,因为与将字节转换为字符有关的问题.虽然这个编码问题并没有真正为我们提供,但是弃用是一个问题,因为它已经无法在某些版本的OpenJDK 7上运行,并且弃用意味着它可以在将来完全删除."官方"的另一种方法是使用readLine从 BufferedReader中,但我们不能做一个完整的换出与DataInputStream所自的BufferedReader不能真正处理的二进制编码的原语.

"混合"这两个类的问题是,当BufferedReader缓冲流时,它会使流标记前进.这意味着对readDouble()来自DataInputStream的方法的后续调用将因IOExceptions或EOFExceptions而失败,因为流标记的实际位置不是"应该"在应用程序逻辑的上下文中的位置.

我查看了某种hacky mark()/ reset()策略,但有时流是由FileInputStream支持的,它不支持mark()/ reset().

除了改变我们的数据协议以将原语写成字符或编写我自己的实现readLine()(这是令人惊讶的非平凡),有没有办法实现这一点?此时我甚至愿意考虑使用外部库.

Ste*_*n C 1

我认为您应该创建一个自定义子类DataInputStream,添加一个readLine类似于您需要的行为的方法。(您甚至可以覆盖现有readLine()方法。)

是的,高效的实现并不简单,但是如果您将自定义类堆叠在BufferedInputStream.