java 引入自定義字體font後出現的硬盤吃光的問題

有個需求要用美術字體在圖片上寫字html

用自定義的文字有兩個方法:java

一、windows

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

二、google

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

我一開始用的是第一種方法:操作系統

InputStream input = FontLoader.class.getResourceAsStream(classPathTTF);
Font dynamicFont = Font.createFont(Font.TRUETYPE_FONT,  input);
input.close();

而後就出現了吃硬盤的問題htm

它會在你的容器的臨時文件哪裏寫不少的臨時文件blog

你用一次他就讀一次,拷貝一份 *.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個方法就能夠了。

String pathString = FontLoader.class.getResource("/font/xxx.ttf").getFile();
Font dynamicFont = Font.createFont(Font.TRUETYPE_FONT, new File(pathString));

這樣不管多少次飲用都不會有tmp文件產生

 

總結一下

方法一、消耗IO,吃硬盤,速度慢,生成不少tmp的文件,大硬盤沒感受,吃光了你就叫吧。
方法二、低IO,速度快,不會生成tmp文件,沒有input流,沒必要關係是否關係。

 

作項目的一個坑,本身作個筆記

相關文章
相關標籤/搜索