byte buf[] = new byte[1024];
file_test.read(buf);这个方法有返回值的可以返回你读到的内容长度的
直接这么写就OK了
File file = new File("C:/picture.PNG");
FileInputStream file_test = new FileInputStream(file);
byte buf[] = new byte[1024];
int buf = 0;
while((buf = file_test.read(buf))!= -1)
{
bos.write(bt, 0, buf);//这里写的时候缓冲数组中有多少就写入多少,可以节省资源。
}
至于读到的是一个byte为什么返回值是int 也是有原因的:
因为字节流读出一个字节可能是8个1,这时这个字节数值为-1,这样写的时候直接判断条件是-1满足,就没有进行写的操作。那么提升为int类型那不是还是-1吗,这是因为在提升的时候前面自动补的是1导致,所以我们只要在前面补0,就可以保留原字节数据不变,又可以避免-1的出现。
想保留一个数的最低4位是和15进行&操作,8位就可以用他来和255(十六进制0xff)进行&操作。这样就避免了-1的情况了。
而write在写的时候又进行了强转的动作,一次只写一个字节,也就是将最低的8位写进去,这样就保证了读写一致。 |