java 引入自定义字体font后出现的硬盘吃光的问题 - Go语言中文社区

java 引入自定义字体font后出现的硬盘吃光的问题


 

--------------------------------------

笔者按:
java 引入自定义字体font后,tomcat的temp目录出现tmp文件,不留意的话,可能占满磁盘空间。

在网上寻找解决办法,找到这篇文章,转载过来。

原文地址:https://www.cnblogs.com/zcy_soft/p/3503656.html

-----------------------------------------

 

有个需求要用美术字体在图片上写字

用自定义的文字有两个方法:

1、

  Font dynamicFont = Font.createFont(Font.TRUETYPE_FONT, InputStream input);

2、

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

我一开始用的是第一种方法:

1

2

3

InputStream input = FontLoader.class.getResourceAsStream(classPathTTF);

Font dynamicFont = Font.createFont(Font.TRUETYPE_FONT,  input);

input.close();

然后就出现了吃硬盘的问题

它会在你的容器的临时文件哪里写很多的临时文件

你用一次他就读一次,拷贝一份 *.tmp文件出来

对于tmp文件的描述google上有很多资料,但是也没有点到要点。

问题参考资料:

sun关于tmp文件的描述

http://www.securiteam.com/windowsntfocus/5UP0H0KDFU.html

http://stackoverflow.com/questions/1751673/font-createfont-leaves-files-in-temp-directory

[#4743] - Too many temporary font files (+~JF tmp)

http://community.jaspersoft.com/jasperreports-library/issues/4743

 

有各种的说法:有人说是bug,有些人说升级到有些版本不会有问题,有些人说是操作系统的缘故等。

还有人的解决方案是定时跑任务,删除tmp文件。这个方式非常不妥当。

以下就是一个用input方式引入自定义font的方式,下面参考资料有坑。

http://www.java2s.com/Code/Java/2D-Graphics-GUI/Loadfontfromttffile.htm

 

 

其实问题很简单,只要替换成第2个方法就可以了。

1

2

String pathString = FontLoader.class.getResource("/font/xxx.ttf").getFile();

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

这样无论多少次饮用都不会有tmp文件产生

 

总结一下

方法1、消耗IO,吃硬盘,速度慢,生成很多tmp的文件,大硬盘没感觉,吃光了你就叫吧。
方法2、低IO,速度快,不会生成tmp文件,没有input流,不必关系是否关系。

 

做项目的一个坑,自己做个笔记

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/dujianxiong/article/details/92813751
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-08 16:14:41
  • 阅读 ( 1469 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢