JDK:Font.canDisplay()是如何生效的

Posted 柳鲲鹏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDK:Font.canDisplay()是如何生效的相关的知识,希望对你有一定的参考价值。

  之前记得某些情况下,Font.canDisplay()有问题。今天试了一下Times New Roman字体对泰的结果,得到了false,说明正确工作了。

  那么Font.canDisplay()是如何生效的?

  • 调用过程

Font.canDisplay(char) line: 2108    
TrueTypeFont(Font2D).canDisplay(char) line: 545    
TrueTypeGlyphMapper(CharToGlyphMapper).canDisplay(char) line: 55    

这个函数中,charToGlyph()得到字符图像索引,如果是-1就是无法显示。

  • 如何得到图像索引

TrueTypeGlyphMapper.charToGlyph(char) line: 149    
TrueTypeGlyphMapper.getGlyphFromCMAP(int) line: 84    
CMap$CMapFormat4.getGlyph(int) line: 587    

先通过二分法,找到char对应的index。

如果index合法(落在startCount和endCount之间),就可以找到索引。否则返回0。

  • canDisplay()

如果返回的glyph与missingGlyph不同,就可以显示。相同肯定无法显示。

missingGlyph初始化为-1,TrueTypeGlyphMapper()中初始化为0。

以上是关于JDK:Font.canDisplay()是如何生效的的主要内容,如果未能解决你的问题,请参考以下文章

应届生面试Java相关岗位可能会被问到哪些技术问题

jdk1.8 -- stream 的使用

Java 8 的 parallelStream 中产生了多少线程?

JDK和Open JDK平常使用的JDK和Open JDK有什么区别

跳槽者应届生必看JAVA面试题系列 - 基础类知识篇

JDK自带工具