gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:18:33 26 4
gpt4 key购买 nike

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

当前的实现使用DataInputStream ,但正如您在文档中看到的那样,由于与将字节转换为字符相关的问题,readLine() 方法已被弃用。虽然这个编码问题并没有真正出现在我们面前,但弃用是一个问题,因为它已经不适用于某些版本的 OpenJDK 7,弃用意味着它可以在未来完全删除。 “官方”替代方法是使用 BufferedReader 中的 readLine ,但我们无法使用 DataInputStream 进行完全换出,因为 BufferedReader 无法真正处理二进制编码的原语。

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

我研究了某种骇人听闻的 mark()/reset() 策略,但有时流由 FileInputStream 支持,它不支持 标记()/重置()

除了更改我们的数据协议(protocol)以将基元写为字符或编写我自己的 readLine() 实现(令人惊讶的是非平凡的)之外,还有什么方法可以实现这一目标吗?在这一点上,我什至愿意考虑一个外部图书馆。

最佳答案

如果当前代码库运行良好并且您唯一的问题是 deprecation 标记,我个人建议从 readLine 方法复制代码DataInputStream 类并将其移动到帮助程序/实用程序类。 DataInputStreamreadLine 方法没有使用大量的实例变量,因此只要稍加努力,您就应该能够很好地使用它。示例调用如下所示:Utils.readLine(dataInStream)。这将确保即使删除该方法,您的代码库也不会受到影响。

是的,它是 hacky,是的,它看起来有点难看,但它是最快且可能是最安全的替代方案(对剩余代码库的最小更改)。

关于java - 是否有一个类在 Java 中公开了一个无缓冲的 readLine 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11331744/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com