关于文件io的一个问题


public static void main(String[] args) {
try {
long starttime = System.currentTimeMillis();

System.out.print("文件操作开始时间:" + starttime + "\n");

File origfile = new File("src\\resources\\Sunset.jpg");
FileInputStream fw = new FileInputStream(origfile);

File newfile = new File("src\\resources\\outImage.jpg");
FileOutputStream fos = new FileOutputStream(newfile);

BufferedOutputStream bos = new BufferedOutputStream(fos);

int a;
while ((a = fw.read()) != -1) {
bos.write(a);
}

bos.flush();
fw.close();
fos.close();
bos.close();

System.out.print("文件操作结束时间:" + System.currentTimeMillis() + "\n");
System.out.println("文件操作耗时:"
+ (System.currentTimeMillis() - starttime) + "毫秒");

} catch (IOException e) {
e.printStackTrace();

}
}

写了一个关于文件io的小例子,虽然能够成功地完成自己预想的功能,但是对其中的一些过程还是不是很明白,问题就是bos何时会将缓存在内存中的字节流写入文件?最初以为是bos.flush()这一句使得内存中的字节流被写入到了文件,但是后来将这句注释掉之后,发现它还是会将字节流写入指定的文件,只是会丢失掉文件末尾的一些字节,据此推断,应该是每次buffer满了以后它会自动将buffer中的东西写入文件,然后开始下一轮缓冲,依此循环,至于最后一部分字节会丢失掉,是因为buffer未满不会自动写入文件,必须用flush强制刷新。但是有一点我比较困惑,我操作的是一个图片文件,在写出的过程中会看到该图片文件的字节数在增长,直到增长到不会自动写入为止,这个时候虽然图片是不全的,但是也应该是可以打开看到一个不全的图片的,而实际上却是打开看不到图片内容,而程序继续运行一小段时间之后又可以看到图片内容了,这期间图片的字节数没有任何变化,这是为何?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值