第19集这个破输出卡了我半个小时,一开始我是因为没写关闭流语句导致没有输出,后来关闭顺序不对又报错,发现是因为要先关闭最外面的包装类,再关闭里面的,严格按照顺序。
但是问题来了,为什么不关闭流就没有输出?
这是一个正常的关闭流并输出的语句:
那么咱们按住Crtl点击bufferedWriter的close方法看看他到底干啥了,这是Close的内部实现:
可以看到除了跟线程有关的语句,具体是调用了一个Writer对象的flushBuffer方法,顾名思义,这个方法意思是输出缓冲区,那么很容易知道Writer流的具体原理并不是直接输出到文件,而是先输出到缓冲区中,而BufferWriter 的close方法调用了输出缓冲区方法,所以只有关闭流才能输出文字,因为不关闭流没法输出缓冲区。
但不关闭流真的没法输出缓冲区吗,咱们输入一个BufferrWriter对象:【bufferWriter.】,然后看一下自动补全的方法:
可以看到其中有一个flush方法 ,那么咱们改写代码:
然后运行发现成功输出到文件,即使这次没关闭流。
**实际上这个问题很小,也不值得我写一长串来解释,但我希望你能学到这种思考方法,在发现只有关闭流才能输出之后不能知其然就可以了,要知其所以然去研究一手凭啥到底非得关了才能输出。**<br />
