直接从 InputStream 或 BufferedReader 读取套接字?
Read a socket direclty from InputStream or from BufferedReader?
我的目标是从Socket
中读取第n个bytes
。
是直接从 InputStream
中读取,还是将其包装成 BufferedReader
更好?
您可以在整个网络中找到这两种方法,但是 none 说明了何时使用哪种方法。
Socket socket;
is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
char[] buffer = new char[CONTENT_LENGTH];
//what is better?
is.read(buffer);
br.read(buffer);
由于您的目标是“读取 n 个字节”,因此从您的输入中创建一个字符 Reader
毫无意义,因为这可能意味着第 n 个字节是字符的一部分 - 并假设流是基于字符的。
从 JDK11 开始,有读取 n 个字节的便捷调用:
byte[] input = is.readNBytes(n);
如果 n 很小并且您经常重复上述操作,请考虑使用 bis = new BufferedInputStream(is)
、in.transferTo(out)
或 len = read(byteArray)
之一读取流,这对于较长的流可能更有效。
我的目标是从Socket
中读取第n个bytes
。
是直接从 InputStream
中读取,还是将其包装成 BufferedReader
更好?
您可以在整个网络中找到这两种方法,但是 none 说明了何时使用哪种方法。
Socket socket;
is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
char[] buffer = new char[CONTENT_LENGTH];
//what is better?
is.read(buffer);
br.read(buffer);
由于您的目标是“读取 n 个字节”,因此从您的输入中创建一个字符 Reader
毫无意义,因为这可能意味着第 n 个字节是字符的一部分 - 并假设流是基于字符的。
从 JDK11 开始,有读取 n 个字节的便捷调用:
byte[] input = is.readNBytes(n);
如果 n 很小并且您经常重复上述操作,请考虑使用 bis = new BufferedInputStream(is)
、in.transferTo(out)
或 len = read(byteArray)
之一读取流,这对于较长的流可能更有效。