Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我们只在网络中缓冲输入?_Java_Sockets_Bufferedreader_Bufferedwriter - Fatal编程技术网

Java 为什么我们只在网络中缓冲输入?

Java 为什么我们只在网络中缓冲输入?,java,sockets,bufferedreader,bufferedwriter,Java,Sockets,Bufferedreader,Bufferedwriter,所以我最近了解到标准是这样的: out = new PrintWriter(echoSocket.getOutputStream(), true); in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream())); out = new BufferedWriter(PrintWriter(echoSocket.getOutputStream(), true)); 我只是想澄清一下,所以对于输出,我们不使

所以我最近了解到标准是这样的:

out = new PrintWriter(echoSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));
out =  new BufferedWriter(PrintWriter(echoSocket.getOutputStream(), true));
我只是想澄清一下,所以对于输出,我们不使用
BufferedWriter
,因为这是服务器端的工作?这样做是不是不对:

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

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


对于一个严肃的应用程序,是的,应该缓冲输出。你不应该写太多的小数据。如果没有其他原因的话,那么每个write()的系统调用开销就是一个杀手。

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


对于一个严肃的应用程序,是的,应该缓冲输出。你不应该写太多的小数据。如果没有其他原因的话,那么每个write()的系统调用开销就是一个杀手。

来自Java文档:

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

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

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

我想

附言:


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

来自Java文档:

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

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

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

我想

附言:



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

没有人会认真使用
PrintWriter
进行网络I/O。@BrianRoach-这是一个很好的观点,那么使用什么来代替呢?这取决于你在做什么。根据你写的东西和你写的方式,你可以使用很多包装。(是的,这很模糊,但没有简单的答案)<例如,code>newbufferedwriter(newoutputstreamwriter(socket.getOutputStream())对于基本网络I/O来说可能非常常见。我们会缓冲输出。这不是Java中的标准基本网络。PrintWriter缓冲输出。这不是一个真正的问题。@BrianRoach-非常感谢!我会进一步研究。没有人会认真使用
PrintWriter
进行网络I/O。@BrianRoach-这是一个很好的观点,那么用什么来代替呢?这取决于你在做什么。根据你写的东西和你写的方式,你可以使用很多包装。(是的,这很模糊,但没有简单的答案)<例如,code>newbufferedwriter(newoutputstreamwriter(socket.getOutputStream())对于基本网络I/O来说可能非常常见。我们会缓冲输出。这不是Java中的标准基本网络。PrintWriter缓冲输出。这不是一个真正的问题。@BrianRoach-非常感谢!我将进一步研究。关于
PrintWriter
我的观点是,在任何实际应用程序中,这样做并不常见。很公平:)。但是,如果我想在端口80和“printf()”上手动打开一个套接字,我自己的HTTP头和内容可能会使用“PrinterWriter”来实现。PrintWriter没有本质上的“错误”。不过要小心换行。HTTP需要\r\n,PrintWriter使用系统默认的换行符。@zhong.j.yu-很好-谢谢!PrintWriter和PrintStream本质上的一个错误是,它们吞并了异常,并且没有提供知道它们是什么的方法:只是一点信息表明发生了异常。这在网络编程中是不够的。您至少需要能够将自己的bug(SocketClosedException等)与网络问题、对等问题区分开来……我关于
PrintWriter
的观点是,在任何实际应用程序中这样做并不常见。很公平:)。但是,如果我想在端口80和“printf()”上手动打开一个套接字,我自己的HTTP头和内容可能会使用“PrinterWriter”来实现。PrintWriter没有本质上的“错误”。不过要小心换行。HTTP需要\r\n,PrintWriter使用系统默认的换行符。@zhong.j.yu-很好-谢谢!PrintWriter和PrintStream本质上的一个错误是,它们吞并了异常,并且没有提供知道它们是什么的方法:只是一点信息表明发生了异常。这在网络编程中是不够的。您至少需要能够将自己的bug(SocketClosedException等)与网络问题、对等问题等区分开来。。。