flush()方法和写入文件的创建和反复写入图片的问题

flush()方法和写入文件的创建和反复写入图片的问题

1、课程案例中并没有用到 flush()方法,具体要怎么用?

2、写入的文件名可以随意取,但是要写入的文件并没有执行创建操作,也就是要写入的文件一开始并不存在,请问课程的复制操作案例里,这一步是在哪里实现的?

3、反复写入并没有增加文件大小,属于反复覆盖,但是输出流构造函数加第2个参数true后,同一张图片,写入多次,大小越来越大,但是图片大小,内容、分辨率什么都没变,增加的大小到哪儿去了?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小蓝 2023-07-21 09:40:36

同学你好~

1.由于缓冲区默认是填满才会清空并写出,所以当缓冲区未被填满但是需要写出的时候调用flush方法手动清空。在IO中,当调用close方法之后,会先清空缓冲区然后再关闭流对象,但是如果IO操作结束之后,程序没有执行结束,流对象还不能被关闭,此时为了保证数据完整,就需要先调用flush方法手动清空。

2.文件名在创建File对象的时候在参数中进行了指定,参数值为“某路径下的某文件”,其中“某文件”就必须是一个合法的文件名,而这个文件如果不存在,就会用这个名字来进行创建了。

3.文件不同于文本,文件会有文件头和一般文件数据。例如图片,最开始是文件头,系统识别到文件头之后才能将其正确的解析为图片形式,然后将一般文件数据解析为文件内容。但是第二次复制之后,会在一般文件数据的末尾追加一个新的文件头,这个文件头显然不是一般文件数据,那么就不能被解析,此时系统解析停止,后续数据就没有意义了。所以就会出现,无论复制多少次,只是文件的内存占用变大了,但是内容并没有改变。

祝学习愉快~

  • 提问者 坨坨儿 #1

    关于第2个回答,假定source文件一开始是存在的,而target文件不存在,我意思是File实例并没有执行 f.createFile来创建target目标文件,在整个复制过程中,程序在哪步开始就生成了target文件?

    2023-07-21 14:18:43
  • 好帮手慕小蓝 回复 提问者 坨坨儿 #2

    同学你好,文件创建的时机分为两种:

    1.第一次对文件进行直接操作,例如写入内容等;

    2.将文件作为参数传递给流对象,例如创建流对象时参数列表中。

    需要注意的是,如果只是使用new File()来创建File对象,是不会立即生成文件实体的,需要至少满足上述两个条件之一才会在硬盘上创建文件实体。

    祝学习愉快~

    2023-07-21 14:28:24
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
Java工程师 2024版
  • 参与学习       2024    人
  • 提交作业       1318    份
  • 解答问题       1228    个

2024重磅革新,超百小时内容豪华升级,加速提升高级技能与高薪就业竞争力 课程紧贴企业最新人才需求,历经7年持续迭代,帮助万名学子入行转行 从零起点到高阶实战,学习路径稳健顺滑,成就从小白到工程师高薪

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师