1
8
不要打电话
写得好的
为声明变量
|
2
5
编辑 :显然,在我不知道的Finalize方法中,fileinputstream确实为您关闭了(),但请参阅其他答案,以了解您不应该依赖它的原因。
在上面的两个示例中,必须同时关闭输入流和输出流。对于打包的缓冲区案例,对于任何打包的案例,只需调用
|
3
2
好吧,当你这样做的时候分析到底发生了什么是很有趣的, 别那么做。 始终显式关闭流。 (要回答您的问题,是的,当GC发生并丢失时,缓冲区中的字节可能没有刷新到文件I/O流中) |
4
2
应该使用@erickson's answer中显示的模式显式关闭流。依赖终结为您关闭流是 真是馊主意 :
同时:
最后一个问题是依赖终结来处理输出流。如果在流完成时流中有未刷新的数据,则输出流类将尝试刷新它。但这都发生在一个JVM内部线程上,而不是应用程序的一个线程上。因此,如果刷新失败(例如,因为文件系统已满),您的应用程序将无法捕获产生的异常,因此无法报告它…或者做任何事来恢复。 编辑
返回到原始问题,结果发现BufferedOutputstream类不会重写默认值
这也是显式关闭流的另一个原因。事实上,在这种情况下,
|