2010-02-02 81 views
3

我有这样的代码:Java:InputStream read()返回一个大于127的字节?

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

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

这是将读取的byte转换为int的结果?
(这样negatif byte成为positif int
如果是的话,我可以通过转换intbyte做同样的(带有OutputStream)?

感谢,
马亭

回答

9

其实read返回一个整数..

public abstract int read() throws IOException 

所以它implictly通过将其存储在一个int铸造是无符号字节。

如文档指出:

读取数据从 输入流的下一个字节。值字节为 ,返回范围为0到 之间的整数。如果由于已达到流末尾的 而没有可用的字节,则返回值-1。

想一想如果它是一个有符号的字节,那么-1不能用作流结束值。

OutputStream你有

public abstract void write(int b) throws IOException 

,并通过文件执行表示将采取通过整数8个低位..

相关问题