我需要从文件中加载字体,并且我注意到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倍。

09-05 09:39