Java的Font类createFont方法创建 +~JF 临时文件

news2024/11/20 18:44:07

一、问题背景

有一个创建图片的项目,每个图片都包含很多的文字,项目中需要生成海量的这类图片。在windows电脑上运行程序发现C盘的存储空间不断下降,直至为0。

二、问题定位

1、定位磁盘的问题文件

当C盘存储空间为0时,使用《全能王C盘清理大师》这个工具清理文件,发现C盘的Users/<用户名>/AppData/Local/Temp目录下产生了大量的"+~JF"开头的文件,每个文件大约4000kB左右。如下图所示:

2、定位问题代码段

在IDEA中单步调试,确认到产生该文件的代码为:Font.createFont()方法。

代码片段如下:

 public static BufferedImage generateFontImage(String text, int width, int height, String fontTTFName,
                                                  float fontWeight, Color fontColor) {

	//字体加载以及设置
	Font rawFont = null;
	Font font = null;

	Resource fontResource = new ClassPathResource("fonts/" + fontTTFName + ".TTF");
	InputStream inputStream = fontResource.getInputStream();
	rawFont = Font.createFont(Font.TRUETYPE_FONT, inputStream);

	font = rawFont.deriveFont(Font.PLAIN, fontWeight).deriveFont(AffineTransform.getShearInstance(-0.18, 0));

查看Font.createFont的源码,片段如下:

public static Font createFont(int fontFormat, InputStream fontStream)
        throws java.awt.FontFormatException, java.io.IOException {

        if (hasTempPermission()) {
            return createFont0(fontFormat, fontStream, null);
        }

查看createFont0的源码,片段如下:

可以看到Font.createFont()方法在使用时确实产生了“+~JF”开头的文件。

进一步分析,发现自己写的代码中,每次生成图片文字都会调用一次字体文件创建,所以导致产生了大量的“+~JF”开头的文件。

三、问题修复

因为字体文件数量有限,没必要每次使用时都加载一次,所以使用缓存技术保证项目运行时每个字体文件仅加载一次。

第1步,创建字体库的hashmap

第2步,使用时判断字体库是否已加载,已加载则直接使用,未加载则加载一次。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1294133.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

针对Google 的 fuzzer-test-suite 的 pcre2-10.00 编译失败的解决方法

针对Google 的 fuzzer-test-suite 的 pcre2-10.00 编译失败的解决方法 查看文件 fuzzer-test-suite/pcre2-10.00/build.sh&#xff0c;文件内容如下&#xff1a; get_svn_revision svn://vcs.exim.org/pcre2/code/trunk 183 SRCbuild_lib build_fuzzer我们获悉&#xff0c;由…

OpenCvSharp从入门到实践-(07)绘制图形

目录 1、线段的绘制 1.1实例1-绘制线段拼成一个"王"字 2、矩形的绘制 2.1实例2-绘制一个矩形边框 2.2实例3-绘制一个实心矩形 3、圆的绘制 3.1实例4-绘制"交通灯" 4、多边形绘制 4.1实例5-绘制等腰梯形 5、文字的绘制 5.1实例6-绘制文字OpenCvS…

直流负载箱的技术发展趋势和创新有哪些?

直流负载箱广泛应用于电子、通信、航空航天等领域&#xff0c;随着科技的不断发展&#xff0c;直流负载箱也在不断创新和改进&#xff0c;直流负载箱在负载电流和电压的测量方面要求高精度和高稳定性。未来的发展趋势是提高负载箱的测量精度和稳定性&#xff0c;以满足更高要求…

2023年12月7日:QT实现登陆界面

#include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {//窗口设置this->resize(600,500);//重新设置窗口大小this->setWindowTitle("QQ-盗版");//设置窗口名为QQ-盗版this->setWindowIcon(QIcon("D:\\Qt\\funny\\pi…

gma 空间绘图实战(1):绘制多个子图,连接并展示局部放大区域

安装 gma&#xff1a;pip install gma 本文基于&#xff1a;gma 2.0.3&#xff0c;Python 3.10 本文用到的矢量数据为&#xff1a;CTAmap 1.12。来源于 https://www.shengshixian.com/ 。&#xff08;感谢锐多宝&#xff09; 绘图目标 参考代码 import matplotlib.pyplot as p…

网站建设app开发小程序制作|企业软件定制

网站建设app开发小程序制作|企业软件定制 网站建设和软件开发是现代社会非常重要的领域&#xff0c;它们对于企业、机构和个人来说都具有非常大的意义。随着移动互联网的快速发展&#xff0c;小程序制作也逐渐成为一种非常受欢迎的方式。 在过去&#xff0c;建立一个网站需要具…

避雷针防雷接地工程应用方案

避雷针是一种用于防止建筑物或其他设施被雷击的装置&#xff0c;它的原理是利用避雷针的尖端产生的电晕放电来释放空气中的电荷&#xff0c;从而降低雷电的危险性。 地凯科技避雷针的类型主要有以下几种&#xff1a; 普通避雷针&#xff1a;这是最常见的避雷针&#xff0c;它由…

Unitree B2:打破波士顿动力Spot垄断地位的机器狗

原创 | 文 BFT机器人 在技术高速发展的时代&#xff0c;机器狗的出现标志着科技领域在机器人技术方面的显著进步&#xff0c;这些曾经只存在于幻想中的机器狗现在已经成为各领域的新星&#xff0c;为安防巡逻、应急救援、工业检测、教育科研等各行各业带来了新的可能性和机遇…

12.07

#include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {//窗口设置//去掉表头this->setWindowFlags(Qt::FramelessWindowHint);//重新设置大小this->resize(800,420);//设置背景颜色this->setStyleSheet("background-color:whi…

java集合之HashMap详解

HashMap详解 介绍 HashMap是在项目中使用的最多的Map&#xff0c;实现了Map接口&#xff0c;继承AbstractMap。基于哈希表的Map接口实现&#xff0c;不包含重复的键&#xff0c;一个键对应一个值&#xff0c;在HashMap存储的时候会将key、value作为一个整体Entry进行存储。 Has…

yum源不起作用_yum无法安装程序_Linux默认源替换---Linux工作笔记067

今天在一台机器上进行安装yum install的时候提示,yum不可用,这时候,折腾了一会 后来更换了默认源就可以了. 首先: 可以看到原来的里面有个 yum.repos.d 里面放了很多源,但是这些源是不可以联网的. 是内网的源,所以,我对他进行了 mv yum.repos.d yum.repos.d.bak 重命名 然…

vm虚拟机固定IP

最近使用vm虚拟机 &#xff0c;可用了一段时间ip就自动变化&#xff0c;于是去网上看了不少教程,但很多都没用。 1.编辑配置 vim /etc/sysconfig/network-scripts/ifcfg-ens33 修改BOOTPROTO为static加入属性IPADDR,设置你想要设置的ip配置GATEWAY与DNS1 不配置GATEWAY与DNS1…

OpenCV-Python:DevCloud CodeLab介绍及学习

1.Opencv-Python演示环境 windows10 X64 企业版系统python 3.6.5 X64OpenCV-Python 3.4.2.16本地PyCharm IDE线上注册intel账号&#xff0c;使用DevCloud CodeLab 平台 2.DevCloud CodeLab是什么&#xff1f; DevCloud是一个基于云端的开发平台&#xff0c;提供了强大的计算…

TCP单聊和UDP群聊

TCP协议单聊 服务端&#xff1a; import java.awt.BorderLayout; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.V…

网站建设软件开发小程序制作|企业app定制

网站建设软件开发小程序制作|企业app定制 随着互联网的快速发展&#xff0c;网站建设、软件开发以及小程序制作成为了当前市场上的热门行业。这些行业不仅为企业提供了更多便利和高效的方式来推广自身的产品和服务&#xff0c;同时也为个人提供了更多创业和就业的机会。 在网站…

Python上网神器,自动修改Hosts工具

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;我是彭涛&#xff0c;今天为大家分享 Python上网神器&#xff0c;自动修改Hosts工具&#xff0c;全文6400字&#xff0c;阅读大约18分钟。 在互联网时代&#xff0c;Hosts 文件的修改是一项常见的任务&#xf…

JFlash烧写单片机bin/hex文件

1&#xff0c;安装压 JLink_Windows_V660c&#xff0c;官网可下载&#xff1b; 2&#xff0c;打开刚刚安装的 J-Flash V6.60c 选择创建新工程“Create a new project”&#xff0c;然后点击StartJ-Flash 点击之后跳出Select device框&#xff0c;选择TI 选择TI后&#xff0c…

水库大坝安全监测参数与设备

智慧水利中&#xff0c;水库大坝的安全监测必不可少。做好水库大坝的安全监测&#xff0c;是确保水库大坝结构安全和预防灾害的重要手段。对于预防灾害、保护人民生命财产安全、优化工程管理、改进工程设计、保护环境资源和提高公众信任等方面有着重要的意义。 水利水库大坝安全…

如何基于Akamai IoT边缘平台打造一个无服务器的位置分享应用

与地理位置有关的应用相信大家都很熟悉了&#xff0c;无论是IM软件里的位置共享或是电商、外卖应用中的配送地址匹配&#xff0c;我们几乎每天都在使用类似的功能与服务。不过你有没有想过&#xff0c;如何在自己开发的应用中嵌入类似的功能&#xff1f; 本文Akamai将为大家提…

韩墨耘——当代大风堂门人代表人物

韩墨耘 中央美术学院客座教授 全国书画艺术委员会副主席 中国书画家协会理事 荣宝斋签约画家 张大千大风堂国展班主任导师 国画大师何海霞亲传弟子 韩墨耘&#xff1a;62年生于洛阳&#xff1b;著名画家、美术教育家、书法家&#xff0c;现居北京。出身书香门第&#xf…