我需要实现这样的方法: int toCodePoint(byte [] buf,int startIndex); 它应该将字节数组中的UTF-8字符解码为代码点。不应该创建额外的对象(这就是我不使用JDK String类进行解码的原因)。 是否有任何现有的java类来执行此操作? 谢谢。
答案 0 :(得分:4)
您可以使用java.nio.charset.CharsetDecoder来执行此操作。您需要ByteBuffer
和CharBuffer
。将数据放入ByteBuffer
,然后使用CharsetDecoder.decode(ByteBuffer in, CharBuffer out, boolean endOfInput)
读取CharBuffer
。然后,您可以使用Character.codePointAt(char[] a, int index)
获取代码点。使用此方法很重要,因为如果您的文本在BMP之外有字符,它们将被翻译成两个字符,因此仅读取一个字符是不够的。
使用此方法,您只需创建两个缓冲区,之后不会创建新对象,除非发生某些错误。
答案 1 :(得分:0)
我所知道的所有现有Java类都不适合此任务,因为您有限制(“不应创建额外的对象”)。否则你可以使用CharsetDecoder(如Malcolm所述)。如果你真的需要纯静态方法,甚至可以使用sun.io.ByteToCharUTF8。但不建议这样做。