【发布时间】:2012-01-20 15:23:27
【问题描述】:
有谁知道标准 Java 库(任何版本)是否提供了一种计算字符串二进制编码长度(在这种情况下特别是 UTF-8)长度而不实际生成编码输出的方法?换句话说,我正在寻找一个有效的等价物:
"some really long string".getBytes("UTF-8").length
我需要为可能很长的序列化消息计算长度前缀。
【问题讨论】:
-
如果您的问题是原始速度,而不是内存,您确定 ad-hoc 函数会比
getBytes+length更快吗?当前的 JRE 在本机代码中实现了相当快的转换例程。 -
我也担心内存压力,但主要担心的是大分配可能会导致更多的垃圾回收开销。与其引入潜在的性能问题(当然,这需要通过分析来验证),我想我会问是否有更具体的 API 可用。顺便说一句,Oracle 的 JRE 不为此使用本机代码:它们分配一个最坏情况的字节数组(
maxBytesPerChar)并使用基于数组的 CharsetEncoder 实现(请参阅sun.nio.cs.UTF_8)。