疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

java 引入自定义字体问题


 

   

  有个需求要用美术字体在图片上写字 用自定义的文字有两个方法:

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

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

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

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

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

  input.close();

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

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

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

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

  问题参考资料:

  sun关于tmp文件的描述

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

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

  其实问题很简单,只要替换成第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流,不必关系是否关系。