2

有没有办法确定给定的字符集(java.nio.charset.Charset)是否使用多个字节对字符进行编码?或者,是否有一个字符集列表,每个字符使用/不使用超过一个字节?

我问的原因是性能调整:我需要知道任意字符串在给定字符集中的长度(以字节为单位)。在单字节编码的情况下,它只是字符串的长度。知道一个字符集是否是单字节的将使我不必先重新编码它。

你可能会认为这是一个微不足道的优化,不可能值得付出努力,但我的应用程序中的大量 CPU 周期都花在了这种无意义的事情上,而我目前遇到的输入数据一直在 20 + 不同的字符集。

4

1 回答 1

6

最简单的方法可能是:

boolean multiByte = charset.newEncoder().maxBytesPerChar() > 1.0f;

请注意,如果不支持编码,newEncoder则可能会抛出。虽然没有记录到抛出那个,但不合适。您可以使用- 如果那是 1,那么它很好地表明它是单字节编码,但理论上您可以有一些字节产生多个字符,而一些字节每个字符占用多个字节,平均为 1...UnsupportedOperationExceptionCharsetnewDecodermaxCharsPerByteaverageCharsPerByte

于 2013-05-18T17:49:53.263 回答