2

特定の Charset (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 に答える