直接从 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) 之一读取流,这对于较长的流可能更有效。