我只是在犹豫这是好主意还是坏主意:
InputStreamReader in = new InputStreamReader(socket.getInputStream());
BufferedReader reader = new BufferedReader(in);
DataInputStream dis = new DataInputStream(in);
现在我想从 BufferedReader 读取数据。如果某个命令(只是一个字符串)到达,我想继续从 DataInputStream 中读取。
这个有用吗?如果是,它被认为是好的还是坏的做法?
(我认为你的例子在什么是阅读器和什么是输入流方面是错误的,但我还是明白了这个问题)
您可以这样做,但您需要准确了解每个组件在缓冲方面的行为。
您正在使用的套接字输入流将只允许您读取某个字节一次(检查 InputStream.markSupported()
)。您可以将该输入流包装在一个 BufferedInputStream
中,它可以有效地提前读取一些字节,而且还添加了执行 mark()
Và 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);
Tôi là một lập trình viên xuất sắc, rất giỏi!