Java:为什么InputStream.read()读取一个byte却返回一个int呢?
在网上搜索到的:InputStream.read()返回一个unsignedbyte[0、-255],而java里面没有这个类型,所以用int接收。byte的范围是[-1...
在网上搜索到的:
InputStream.read()返回一个unsigned byte[0、-255],而java里面没有这个类型,所以用int接收。
byte的范围是[-128、127],所以如果read()返回的数在[128、255]的范围内时,则表示负数,即
(byte)128=-128
(byte)129=-127
(byte)255=-1
所以如果read()返回的是byte的话,那就会有负数。而"返回-1意味着结束",这个信息量用byte是无法表达的,所以必须用int。
我的疑惑
我知道各实现类的read()方法底层都是C++实现的native read(),但是没有明白上面说的“如果read()返回的是byte的话,那就会有负数”是什么意思,有大神明白说的是啥意思么?指点一下小弟 展开
InputStream.read()返回一个unsigned byte[0、-255],而java里面没有这个类型,所以用int接收。
byte的范围是[-128、127],所以如果read()返回的数在[128、255]的范围内时,则表示负数,即
(byte)128=-128
(byte)129=-127
(byte)255=-1
所以如果read()返回的是byte的话,那就会有负数。而"返回-1意味着结束",这个信息量用byte是无法表达的,所以必须用int。
我的疑惑
我知道各实现类的read()方法底层都是C++实现的native read(),但是没有明白上面说的“如果read()返回的是byte的话,那就会有负数”是什么意思,有大神明白说的是啥意思么?指点一下小弟 展开
6个回答
展开全部
要回答这个问题,需要弄清楚read()返回值表达是什么意思。当读取的是数字和英文时,返回值是对应的ascii码,当读取的是汉字时,返回的是汉字的机内码,比如你用的GBK编码方式,返回的就是GBK的内部编码,read()方法每次从inputstream中读取一个字节,而一个字节是8位,能2的八次方个数,也就是256,这也是read()返回0~255之间的数的原因。而asc是没有负数的,所以用byte表示不了,就用int啦。实际运用中其实并不需要在意返回的数值,而只要注意返回-1代表读取结束了。返回值的意义可以参考下面的网址:
http://bbs.csdn.net/topics/220057437
http://bbs.csdn.net/topics/220057437
展开全部
InputStream.read()读取一个byte却返回一个int的原因如下:
InputStream.read()返回一个unsigned byte [0 - 255],而java里面没有这个类型,所以用int接收。byte的范围是[-128,127],所以如果read()返回的数在[128,255]的范围内时,则表示负数,即
(byte)128=-128
(byte)129=-127
(byte)255=-1
所以如果read()返回的是byte的话,那就会有负数。而"返回-1意味着结束",这个信息量用byte是无法表达的,所以必须用int。
InputStream.read()返回一个unsigned byte [0 - 255],而java里面没有这个类型,所以用int接收。byte的范围是[-128,127],所以如果read()返回的数在[128,255]的范围内时,则表示负数,即
(byte)128=-128
(byte)129=-127
(byte)255=-1
所以如果read()返回的是byte的话,那就会有负数。而"返回-1意味着结束",这个信息量用byte是无法表达的,所以必须用int。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
InputStream.read()返回一个unsigned byte [0 - 255],而Java里面没有这个类型,所以用int接收。
byte的范围是[-128,127],所以如果read()返回的数在[128,255]的范围内时,则表示负数,即
(byte)128=-128
(byte)129=-127
(byte)255=-1
所以如果read()返回的是byte的话,那就会有负数。而"返回-1意味着结束",这个信息量用byte是无法表达的,所以必须用int。
byte的范围是[-128,127],所以如果read()返回的数在[128,255]的范围内时,则表示负数,即
(byte)128=-128
(byte)129=-127
(byte)255=-1
所以如果read()返回的是byte的话,那就会有负数。而"返回-1意味着结束",这个信息量用byte是无法表达的,所以必须用int。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-01-12
展开全部
这个方法,是返回一个int的。
想返回一个byte,使用
byte b[]=new byte[1];
int r=
in.read(b);
想返回一个byte,使用
byte b[]=new byte[1];
int r=
in.read(b);
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
使用 int的低8位表示 0-255
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询