Java:InputStream read()返回一个大于127的字节?

Mar*_*aux 3 java io int byte

我有这个代码:

InputStream is = socket.getInputStream();
int b;
while ((b = is.read()) != -1)
{
   System.out.println(b);
}
Run Code Online (Sandbox Code Playgroud)

一个字节,其范围是-128直到+127.
但其中一个打印的字节是210.

这是将读取byte转换为int?的结果?
(因此,negatif byte成为一个positif int)
如果是这样,我可以OutputStream通过将inta 转换为a 来做同样的事情byte吗?

谢谢,
Martijn

Jac*_*ack 9

实际上read返回一个整数..

public abstract int read() throws IOException
Run Code Online (Sandbox Code Playgroud)

因此,通过将其存储在int中,它被隐含地转换为无符号字节.

如文件中所述:

从输入流中读取下一个数据字节.值字节作为int返回,范围为0到255.如果没有字节可用,因为已到达流的末尾,则返回值-1.

想想如果它是一个带符号的字节,则-1不能用作流值的结尾.

OutputStream你有

public abstract void write(int b) throws IOException
Run Code Online (Sandbox Code Playgroud)

并且如文档实现所述,将传递整数的8个低位.