在调用绘图工具类的时候,发现绘图之后生成的图片一直被占用,流无法释放。
最终发现是参考的示例代码中流对象的实例化写法有问题。
错误写法:
try {
ImageIO.write(bufferImage, imageType, new FileOutputStream(outFilePath) );
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
图中的 FileOutputStream是在方法内部new的。
问题:这种写法,在方法执行结束以后,new的对象会被释放,但是对象占用的流并不会一起释放,导致流占用问题。
正确写法:
try {
FileOutputStream fileOutputStream = new FileOutputStream(outFilePath);
ImageIO.write(bufferImage, imageType, fileOutputStream);
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}