JAVA. FileInputStream 的 read()方法一次读取一个字节并返回 那返回类 20
JAVA.FileInputStream的read()方法一次读取一个字节并返回那返回类型不应该是byte吗为什么是int呢...
JAVA. FileInputStream 的 read()方法一次读取一个字节并返回 那返回类型不应该是byte吗 为什么是int呢
展开
3个回答
2014-10-27
展开全部
从输入流中读取数据的下一个字节。返回 0 到 255 范围内的 int 字节值。如果因为已经到达流末尾而没有可用的字节,则返回值 -1。我们需要使用一个不可能在数据中出现的值来表示流末尾, Java中就是用-1来表示这个末尾的, 因为-1不会在数据中出现,如果返回byte, 同样无法表示流末尾., byte的取值范围是从-128到127,这个范围内所有的数据, 都有可能在数据中出现,read()方法需要返回一个特殊的值来表示流末尾, 这个值不能和流中的数据重复,read()方法内部将读取到的所有字节高位补0转为int返回, 这样做所有的数据都会是正数,这时就可以用-1表示流末尾了,而改变后的数据只要强转回byte, 就可以得到原有数据。也就是说你把一个字节的数据和java中的byte类型的数据混淆了。
展开全部
返回的int表示此次read()读到byte数据的长度,若要保留返回的的数据,需要传入要接收的byte[]数组。
例如:
FileInputStream fis=new FileInputStream(new File("D:\\123.txt"))
byte[] b=new byte[fis.available()];//新建一个字节数组
fis.read(b);//将文件中的内容读取到字节数组中
例如:
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)读到字节数组中数据最大的长度是字节数组的长度。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询