A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘晓康 中级黑马   /  2012-3-30 16:00  /  2506 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我从一个文件输入流中读取图象文件,然后把他放入byte数组中
我怎么能知道byte数组被写入的数据的长度呢
谢谢
File file = new File("C:/picture.PNG");
FileInputStream file_test = new FileInputStream(file);
byte buf[] = new byte[1024];
file_test.read(buf);

1 个回复

倒序浏览
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位写进去,这样就保证了读写一致。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马