0

所以我最近了解到,Java 中的标准基本网络是这样的:

out = new PrintWriter(echoSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));

我只是想澄清一下,所以对于输出我们不使用 aBufferedWriter因为那是服务器端的工作?做这样的事情会不会是错误的:

out =  new BufferedWriter(PrintWriter(echoSocket.getOutputStream(), true));
4

2 回答 2

3

从 Java 文档:

http://docs.oracle.com/javase/tutorial/essential/io/buffers.html

到目前为止,我们看到的大多数示例都使用无缓冲 I/O。这意味着每个读取或写入请求都由底层操作系统直接处理。这会使程序的效率大大降低,因为每个这样的请求通常都会触发磁盘访问、网络活动或其他一些相对昂贵的操作。

为了减少这种开销,Java 平台实现了缓冲 I/O 流。缓冲输入流从称为缓冲区的内存区域读取数据;仅当缓冲区为空时才调用本机输入 API。类似地,缓冲输出流将数据写入缓冲区,并且仅当缓冲区已满时才调用本机输出 API。

是的,“缓冲”输入输出通常是一个好主意。

恕我直言...

PS:

我看不出 PrintWriter 有什么问题。特别是如果我想直接对套接字执行“printf()”样式的文本 I/O。

于 2013-03-16T00:39:39.780 回答
1

我不会称该示例为“标准”。这是一个简单的教程。它BufferedReader不是用于缓冲,而是用于BufferedReader.readLine()方法。

对于一个严肃的应用程序,是的,输出应该被缓冲。你不应该写很多小数据。如果不出意外,每个 write() 的系统调用开销是一个杀手。

于 2013-03-16T00:34:57.943 回答