JAVA. FileInputStream 的 read()方法一次读取一个字节并返回 那返回类 20

JAVA.FileInputStream的read()方法一次读取一个字节并返回那返回类型不应该是byte吗为什么是int呢... JAVA. FileInputStream 的 read()方法一次读取一个字节并返回 那返回类型不应该是byte吗 为什么是int呢 展开
 我来答
匿名用户
2014-10-27
展开全部
从输入流中读取数据的下一个字节。返回 0 到 255 范围内的 int 字节值。如果因为已经到达流末尾而没有可用的字节,则返回值 -1。我们需要使用一个不可能在数据中出现的值来表示流末尾, Java中就是用-1来表示这个末尾的, 因为-1不会在数据中出现,如果返回byte, 同样无法表示流末尾., byte的取值范围是从-128到127,这个范围内所有的数据, 都有可能在数据中出现,read()方法需要返回一个特殊的值来表示流末尾, 这个值不能和流中的数据重复,read()方法内部将读取到的所有字节高位补0转为int返回, 这样做所有的数据都会是正数,这时就可以用-1表示流末尾了,而改变后的数据只要强转回byte, 就可以得到原有数据。也就是说你把一个字节的数据和java中的byte类型的数据混淆了。
aininevers
2014-10-27
知道答主
回答量:43
采纳率:0%
帮助的人:23万
展开全部
只返回低八位。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
继续o低调
2014-10-27 · TA获得超过158个赞
知道小有建树答主
回答量:100
采纳率:0%
帮助的人:120万
展开全部
返回的int表示此次read()读到byte数据的长度,若要保留返回的的数据,需要传入要接收的byte[]数组。
例如:
FileInputStream fis=new FileInputStream(new File("D:\\123.txt"))

byte[] b=new byte[fis.available()];//新建一个字节数组
fis.read(b);//将文件中的内容读取到字节数组中
更多追问追答
追问
用io流复制文件的时候读取到的内容放在字节数组里 while(len=f.read(buf)!=-1)为什么write的时候却是write(buf,0,len)
追答
因为从buf字节数组中往外写内容可能只写buf字节数组中的一部分,而不是全部。所以写内容是要给出数组的起始位置和要写内容的长度,例如从第2个字节到底8个字节则write(buf,1,7),因为数组索引都是从0开始。
而read(buf)读到字节数组中数据最大的长度是字节数组的长度。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式