java Font 序列化,临时文件详解

      公司最近向 dubbo + spring +redis 迁移,Font 原来是缓存在静态数组内部的,现在需要向 dubbo 迁移了,Font 需要往redis内缓存,这就遇到问题了,Font 虽然实现了serailize接口但是如果使用第三方 字库,这个Font 序列化后会丢失,也就是说 Font  是不能缓存的。经过研究 Font 内 存储第三方字库的内容位于 Font2DHandle 这个类,这个类是不支持序列化的,且内部只存储了 字库文件的路径,也就是说,这个必须去本地读文件。dubbo 的每一个实例都需要加载一次本地文件。

    Font font = Font.createFont(Font.TRUETYPE_FONT, is).deriveFont(Font.PLAIN, 100);  //(虽然是流,但是会在本地生成临时文件后再读取本地文件)
    GraphicsEnvironment.getLocalGraphicsEnvironment().registerFont(font);

仅仅能用registerFont 在单个实例内注册一次,方便以后使用。

之后仅需

    String fontName = font.getFontName();
    Font fontRegistered = new Font(fontName, Font.PLAIN, 100);

每次启服务都需要重新加载。


File 对象是不能缓存的,因为File 指的是本地文件协议,仅仅只有本地文件可以,即使是 虚拟文件系统apacheVFS 也无法做到,因为在设计上File 就是指本地文件。本地文件与流最大的区别就是: 流是一次性的,只能向下迭代。












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值