Java: InputStream read()方法返回大于127的字节?

3

I've this code:

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

一个字节的范围是从-128+127
但是其中一个打印出来的字节是210
这是将读取的byte转换为int的结果吗?
(因此,负的byte变成了正的int
如果是这样,我可以通过将int转换为byte(使用OutputStream)来做同样的事情吗?
谢谢,
Martijn
1个回答

9
实际上,read 返回一个整数。
public abstract int read() throws IOException

因此,通过将其存储在int中,它会被隐式转换为无符号字节。

根据文档:

从输入流中读取下一个字节的数据。将值字节作为介于0到255之间的int返回。如果没有可用的字节,因为已经到达流的末尾,则返回值-1。

请考虑这样一个事实:如果它是有符号字节,则无法使用-1作为流结束值。

对于OutputStream,您有

public abstract void write(int b) throws IOException

根据文档说明,实现将获取传递的整数的8个低位比特。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接