我需要从文件中加载字体,并且我注意到Font.createFont()
大约需要5秒钟才能完成每个字体的创建。这是我的资源管理课程的相关摘录:
try(InputStream in = getClass().getResourceAsStream(FONT_DIR + fontName + FONT_EXT))
{
long startTime = System.nanoTime();
Font awtFont = Font.createFont(Font.TRUETYPE_FONT, in); //<-- This operation takes about 5 seconds
System.out.println("Operation took: " + (System.nanoTime() - startTime) / 1000000);
awtFont = awtFont.deriveFont(fontSize);
result = new TrueTypeFont(awtFont, antiAlias);
}
我检查了类似的帖子,但找不到解决方案。所以我的问题是:是否有一种从文件创建java.awt.Font的更快方法,还是我做错了什么?
感谢您的时间,祝您有美好的一天!
亚历克斯
最佳答案
createFont(int fontFormat, InputStream fontStream)
在文件已经存在时创建一个新文件(这需要/检查写权限-这是另一项性能代价)。
因此,如果您想从流中创建字体-不幸的是,没有其他选择。请注意,例如在JAR中打包字体时,这实际上非常方便。
因此,还有另一种静态方法createFont(int fontFormat, File fontFile)
由于您将字体当作文件使用,因此使用此字体既方便又更好。
在这种情况下,它效率更高,更方便-并且速度更快(不创建与创建临时文件)
平均而言,它会快3倍。