Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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 我可以同时使用BufferedReader和BufferedInputStream吗?_Java_Io_Inputstream - Fatal编程技术网

Java 我可以同时使用BufferedReader和BufferedInputStream吗?

Java 我可以同时使用BufferedReader和BufferedInputStream吗?,java,io,inputstream,Java,Io,Inputstream,我只是想知道是否可以同时使用BufferedReader和BufferedInputStream 例如,我创建一个套接字并从服务器读取一些数据,假设我使用默认字符集。我可以这样编码吗 Reader reader = new BufferedReader( new InputStreamReader( new BufferedInputStream(

我只是想知道是否可以同时使用BufferedReader和BufferedInputStream

例如,我创建一个套接字并从服务器读取一些数据,假设我使用默认字符集。我可以这样编码吗

Reader reader = new BufferedReader(
                      new InputStreamReader(
                          new BufferedInputStream(
                               socket.getInputStream)));

或者我应该一次只使用这两个类中的一个?谢谢你的帮助。

你可以,但这毫无意义。没有优势。只需使用
BufferedReader
。它将从
InputStreamReader
中读取4K个数据块,目前可能会更多,因此
InputStreamReader
没有任何效率问题,例如一次解码一个
char
。唯一有帮助的方法是如果有更多的缓冲区帮助应用程序,如果可以的话,最好增加BufferedInputStream的缓冲区大小,而不是包装对象。另外,请考虑改用NIO,并在InputStream上直接使用直接缓冲区(如果您想提高速度,可以使用大的64k缓冲区)。@markspace-它可能无法提供“更多”缓冲。当
BufferedReader
用完字符时,它将沿着管道发出一个大型
read
请求。根据相对缓冲区大小、文件编码等,这可能在不从操作系统读取的情况下得到满足,或者可能需要1个、2个或多个操作系统读取调用。“假设我使用默认字符集”-这没有帮助。默认的字符集可以是任何东西,而实际的字符集实际上可能很重要。