【干货】java引入字体java.awt.font后出现占用磁盘较大No space left on device

在一篇文章中介绍了自定义字体的实现方法,linux java程序加水印及中文乱码方案(二)

部署到生产后,过了五天,用户反馈图片无法上传,排查日志,发现日志出现java.io.IOException “No space left on device”

翻译成中文: 磁盘空间不足,联系运维赶紧查看服务器空间使用情况 , 结果发现Tomcat下面的temp占用了10G临时文件,类似这种:+~JF4844365602747688375.tmp

经过分析程序,发现原来的代码有问题:

File file = new File(fontFileName);
FileInputStream in = new FileInputStream(file);
Font dynamicFont = Font.createFont(Font.TRUETYPE_FONT, in);

出现了吃硬盘的问题。它会在你的容器的临时文件哪里写很多的临时文件,你用一次他就读一次,拷贝一份 *.tmp文件出来

 

知道原因了,重新调整代码,新代码如下:

Font dynamicFont = Font.createFont(Font.TRUETYPE_FONT, new File(fontFileName));

经过验证,不会再出现消息磁盘空间了,优点:低IO,速度快,不会生成tmp文件,没有input流

你可能感兴趣的:(网络编程)