黑马程序员技术交流社区

标题: IO问题 [打印本页]

作者: 刘晓康    时间: 2012-3-30 16:00
标题: IO问题
我从一个文件输入流中读取图象文件,然后把他放入byte数组中
我怎么能知道byte数组被写入的数据的长度呢
谢谢
File file = new File("C:/picture.PNG");
FileInputStream file_test = new FileInputStream(file);
byte buf[] = new byte[1024];
file_test.read(buf);


作者: 薛波    时间: 2012-3-30 16:13
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位写进去,这样就保证了读写一致。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2