gpt4 book ai didi

java - DataInputStream readLine() 已弃用

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:27:01 25 4
gpt4 key购买 nike

我需要使用 DataInputStream,因为我需要已弃用的 readLine() 功能并且我不知道输入文件的确切文件格式(即使用什么行尾),而且还需要读取二进制编码的原语.

这类似于这个问题:

Is there a class that exposes an unbuffered readLine method in Java?

我的建议是使用这样的东西

public class SaveDataInputStream extends DataInputStream {
public SaveDataInputStream(InputStream in) {super(in);}
public String readLineSave() throws IOException {
// ???
}
}

并使用可以在 DataInputStream 类中找到的 readLine() 方法内容(这类似于所引用问题中接受的答案)。但是,我不完全理解为什么不推荐使用该方法,我想知道它是否与我的代码相关。

javadoc 说:此方法不能正确地将字节转换为字符。

但这意味着什么呢?我应该为此担心吗?在最坏的情况下会发生什么?是否可以编写我自己的方法来解决问题(效率并不是真正的问题)?

提示:new BufferedReader(new InputStreamReader(..));不是正确答案...

最佳答案

当他们说 readLine() 被弃用是因为它不能正确转换字符时,他们的意思是它不允许您指定字符编码,例如 UTF-8 与 CP1252 .这意味着如果读取一个默认为不同字符编码的系统,则使用一种字符编码写入的数据很可能会失败。

所以,你需要担心吗?当然。方法已被弃用,以向开发人员发出警告,它可能会在未来消失。也就是说,根据 JavaDoc,readLine() 在 JDK 1.1 中已被弃用,这是很久以前的事了。

至于你因为缓冲而不想要 BufferedReader 的观点,我会说不要使用它。使用扩展 Reader 的其他类之一或者,如果你想变得那么极端,那就自己动手吧。没有什么能阻止您创建自己的名为 DataInputReader 的类,添加方法来读取您的原​​语,并提供适当的 readLine() 实现来满足您的需求。

但是,如果您正在读取二进制编码数据,我建议您根本不使用阅读器,而是坚持使用 InputStream,这样您就可以读取原始的 byte 和自己处理转换。 Reader 的设计考虑到了字符编码的处理,因此在尝试将二进制数据转换为字符串的前提下,倾向于修改您正在阅读的内容。

关于java - DataInputStream readLine() 已弃用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21754078/

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