什么是 Java 中的“代理对”?

新手上路,请多包涵

我正在阅读 StringBuffer 的文档,特别是 reverse() 方法。该文档提到了有关 代理对 的内容。在这种情况下,代理对是什么?什么是 代理和 代理?

原文由 Raymond 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

术语“代理对”是指在 UTF-16 编码方案中使用高代码点对 Unicode 字符进行编码的方法。

在 Unicode 字符编码中,字符被映射到 0x0 和 0x10FFFF 之间的值。

在内部,Java 使用 UTF-16 编码方案来存储 Unicode 文本字符串。在 UTF-16 中,使用 16 位(两字节)代码单元。由于 16 位只能包含从 0x0 到 0xFFFF 的字符范围,因此使用一些额外的复杂性来存储超出此范围(0x10000 到 0x10FFFF)的值。这是使用称为代理项的成对代码单元完成的。

代理代码单元位于两个范围内,称为“高代理”和“低代理”,具体取决于它们是否允许出现在双代码单元序列的开头或结尾。

原文由 Jeffrey L Whitledge 发布,翻译遵循 CC BY-SA 3.0 许可协议

早期的 Java 版本使用 16 位 char 数据类型表示 Unicode 字符。这种设计在当时是有意义的,因为所有 Unicode 字符的值都小于 65,535 (0xFFFF),并且可以用 16 位表示。然而,后来 Unicode 将最大值增加到 1,114,111 (0x10FFFF)。由于 16 位值太小,无法表示 Unicode 3.1 版中的所有 Unicode 字符,因此 UTF-32 编码方案采用了 32 位值(称为代码点)。但是 16 位值优于 32 位值以实现高效内存使用,因此 Unicode 引入了一种新设计以允许继续使用 16 位值。 UTF-16编码方案中采用的这种设计,将1,024个值分配给16位高代理(在U + D800到U + DBFF范围内)和另外1,024个值给16位低代理(在U + DC00范围内)到 U+DFFF)。它使用高代理项和低代理项(代理对)来表示(1,024 和 1,024 的乘积)1,048,576 (0x100000) 个介于 65,536 (0x10000) 和 1,114,111 (0x10FFFF) 之间的值。

原文由 ibrahem shabban 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题