Java 性能:字体文件通常如何与用户交互?

Java 性能:字体文件通常如何与用户交互?,java,fonts,glyph,truetype,Java,Fonts,Glyph,Truetype,我正在手动解析TrueType(.ttf)字体文件中的字形。根据文件的大小,这些符号可能会有数百到数千种不同的glyph。这些字形可以分割成离散的范围,如拉丁语、希腊语、西里尔语等 我只是想知道,像Microsoft Word这样的传统文本应用程序是如何处理如此大量的字形的?是否在初始化时加载一定范围的字符,并在需要时加载特殊字符?如果是这样的话,我会将字体数据永久保存在内存中,以便从中解析字体数据,还是在需要时定期从源文件打开、流式处理和关闭字体数据更好 几乎所有系统都会根据需要加载图示符。几

我正在手动解析TrueType(.ttf)字体文件中的字形。根据文件的大小,这些符号可能会有数百到数千种不同的glyph。这些字形可以分割成离散的范围,如拉丁语、希腊语、西里尔语等


我只是想知道,像Microsoft Word这样的传统文本应用程序是如何处理如此大量的字形的?是否在初始化时加载一定范围的字符,并在需要时加载特殊字符?如果是这样的话,我会将字体数据永久保存在内存中,以便从中解析字体数据,还是在需要时定期从源文件打开、流式处理和关闭字体数据更好

几乎所有系统都会根据需要加载图示符。几乎所有这些文件都将使用过的字体文件映射到内存中

据我所知,在Windows中,至少在GDI中,一些字体处理的核心实际上是在内核中实现的。允许在进程之间共享字体内存使用情况(映射文件以及光栅化结果缓存)。Linux的实现方式非常不同,就像现代字体一样,每个进程都从头开始光栅化所需的字形。然而,X服务器跨进程共享glyph缓存,但这是一个实现细节


无论如何,根据需要加载图示符。没有理由不这样做。如果您能更具体地说明您想要做什么,可能会提供更多帮助。

几乎所有系统都会根据需要加载图示符。几乎所有这些文件都将使用过的字体文件映射到内存中

据我所知,在Windows中,至少在GDI中,一些字体处理的核心实际上是在内核中实现的。允许在进程之间共享字体内存使用情况(映射文件以及光栅化结果缓存)。Linux的实现方式非常不同,就像现代字体一样,每个进程都从头开始光栅化所需的字形。然而,X服务器跨进程共享glyph缓存,但这是一个实现细节


无论如何,根据需要加载图示符。没有理由不这样做。如果您能更具体地说明您想要做什么,可能会有更多帮助。

非常感谢您的见解。我想我只是对长期引用某个文件有所保留。那么您是说大多数系统将映射文件存储在RAM中,并根据需要从文件中获取字形数据?我正在开发一个需要处理矢量字体的跨平台项目,所以我希望看到的是实际的字形数据,而不是高层次的抽象。我想支持所有unicode字符,但我担心在渲染时必须获取更多字符会对性能造成影响。在大多数系统上,当文件被“映射”时,它不一定要保存在RAM中。它将按需加载。大多数支持全范围Unicode的系统都是通过延迟加载使用的任何字符/字形并缓存来实现的。非常感谢您的见解。我想我只是对长期引用某个文件有所保留。那么您是说大多数系统将映射文件存储在RAM中,并根据需要从文件中获取字形数据?我正在开发一个需要处理矢量字体的跨平台项目,所以我希望看到的是实际的字形数据,而不是高层次的抽象。我想支持所有unicode字符,但我担心在渲染时必须获取更多字符会对性能造成影响。在大多数系统上,当文件被“映射”时,它不一定要保存在RAM中。它将按需加载。大多数支持全范围Unicode的系统都是通过延迟加载使用的任何字符/字形并缓存来实现的。