gpt4 book ai didi

java - 使用一个 InputStream 作为多个更高级别 InputStream(如 BufferedReader、DataInputStream)的源

转载 作者:可可西里 更新时间:2023-11-01 02:44:33 28 4
gpt4 key购买 nike

我只是在犹豫这是好主意还是坏主意:

InputStreamReader in = new InputStreamReader(socket.getInputStream());
BufferedReader reader = new BufferedReader(in);
DataInputStream dis = new DataInputStream(in);

现在我想从 BufferedReader 读取数据。如果某个命令(只是一个字符串)到达,我想继续从 DataInputStream 中读取。

这个有用吗?如果是,它被认为是好的还是坏的做法?

最佳答案

(我认为你的例子在什么是阅读器和什么是输入流方面是错误的,但我还是明白了这个问题)

您可以这样做,但您需要准确了解每个组件在缓冲方面的行为。

您正在使用的套接字输入流将只允许您读取某个字节一次(检查 InputStream.markSupported())。您可以将该输入流包装在一个 BufferedInputStream 中,它可以有效地提前读取一些字节,而且还添加了执行 mark()reset() 的功能>.

这意味着 BufferedInputStream 之上的任何读取器/输入流都可以提前读取、标记、向后跳等。但是这里需要小心,不要再添加一层“缓冲区”- 即 BufferedReader > InputStreamReader > BufferedInputStream > InputStream

所以答案是肯定的,它可以工作,只要知道每个组件的确切行为(我经常看到人们投入 BufferedXXX 只是为了它的 hell )。

在你的例子中我会这样做:

BufferedInputStream in = new BufferedInputStream(socket.getInputStream());
InputStreamReader reader = new InputStreamReader(in, "utf-8"); // consider char encoding
DataInputStream dis = new DataInputStream(in);

关于java - 使用一个 InputStream 作为多个更高级别 InputStream(如 BufferedReader、DataInputStream)的源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7865577/

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