Java:InputStream中的read()返回int类型的疑问
(byte)in.read();read()的底层是由C++实现的,返回的是unsignedbyte,取值范围为[0~255],在java中没有对应的类型,所以只能用in...
(byte) in.read();
read()的底层是由C++实现的,返回的是unsigned byte,取值范围为[0~255],在java中没有对应的类型,所以只能用int类型接收,那前面的byte的意思是转换成java中的byte类型,也就是c++返回的[0~255]与Java中byte类型的[-128~127]的对应
(byte)128=-128
(byte)129-127
(byte)255=-1
是这个意思吗? 展开
read()的底层是由C++实现的,返回的是unsigned byte,取值范围为[0~255],在java中没有对应的类型,所以只能用int类型接收,那前面的byte的意思是转换成java中的byte类型,也就是c++返回的[0~255]与Java中byte类型的[-128~127]的对应
(byte)128=-128
(byte)129-127
(byte)255=-1
是这个意思吗? 展开
4个回答
展开全部
这跟接口设计有关,read()设计时就决定返回-1表示流结束,为啥要用read()返回-1表示流结束而不是再加1个函数譬如eof()呢,我认为是因为函数调用成本很高,尤其是native函数,为了效率同时又简单清晰,所以决定读取字节时均返回正整数,而流结束则返回-1
c++的unsigned byte与java的byte对应关系没错,jvm内部byte是用补码实现的,譬如128的2进制为10000000,它对应的数为128取反再加1再取其负数,10000000取反=01111111=127,再加1=128,取负数就是-128,129与255都一样的道理
c++的unsigned byte与java的byte对应关系没错,jvm内部byte是用补码实现的,譬如128的2进制为10000000,它对应的数为128取反再加1再取其负数,10000000取反=01111111=127,再加1=128,取负数就是-128,129与255都一样的道理
展开全部
人家是把取出来的byte直接放在int的低8位里面,全部都是二进制01串,你要怎么操作怎么理解那一串是什么东西就是你自己的事了。。。
不过一般java还真很少去这样子搞操作,inputstream是个抽象类,
public abstract int read() throws IOException; 这个方法是没有内容的,调用的时候实际上是调的子类的实现
不过一般java还真很少去这样子搞操作,inputstream是个抽象类,
public abstract int read() throws IOException; 这个方法是没有内容的,调用的时候实际上是调的子类的实现
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-01-12
展开全部
可以这样认为的。
单纯这样看问题,帮助不是很好。在实际应用中,更有意义。如,一个C++的服务器端、java的客户端,这样的环境。
单纯这样看问题,帮助不是很好。在实际应用中,更有意义。如,一个C++的服务器端、java的客户端,这样的环境。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
C++有unsigned,java没有
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询