【问题标题】:Java: InputStream read() returns a byte bigger than 127?Java:InputStream read() 返回大于 127 的字节?
【发布时间】:2013-07-10 01:53:40
【问题描述】:

我有这个代码:

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)吗?

谢谢,
马丁

【问题讨论】:

    标签: java io int byte


    【解决方案1】:

    其实read返回一个整数..

    public abstract int read() throws IOException
    

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

    如文档所述:

    从 输入流。值字节是 以 int 形式返回,范围为 0 到 255. 如果没有字节可用,因为流的结尾已经结束 达到,返回值-1。

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

    对于OutputStream,你有

    public abstract void write(int b) throws IOException
    

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

    【讨论】:

      猜你喜欢
      • 2019-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-12
      相关资源
      最近更新 更多