UTF-8 до кодовой точки - PullRequest
       1

UTF-8 до кодовой точки

2 голосов
/ 14 февраля 2012

Мне нужно реализовать такой метод: int toCodePoint (byte [] buf, int startIndex); Он должен декодировать символ UTF-8 в байтовом массиве до точки кода. Не нужно создавать никаких дополнительных объектов (вот почему я не использую класс JDK String для декодирования). Существуют ли какие-либо классы Java для этого? Спасибо.

Ответы [ 2 ]

4 голосов
/ 14 февраля 2012

Вы можете использовать java.nio.charset.CharsetDecoder , чтобы сделать это.Вам понадобятся ByteBuffer и CharBuffer.Поместите данные в ByteBuffer, затем используйте CharsetDecoder.decode(ByteBuffer in, CharBuffer out, boolean endOfInput) для чтения в CharBuffer.Тогда вы можете получить кодовую точку, используя Character.codePointAt(char[] a, int index).Важно использовать этот метод, потому что если ваш текст содержит символы вне BMP, они будут переведены в два символа, поэтому недостаточно прочитать только один символ.

При использовании этого метода вам нужно создать только два символабуферизуется один раз, после чего никакие новые объекты не будут созданы, если не произойдет какая-либо ошибка.

0 голосов
/ 14 февраля 2012

Все существующие классы Java, которые я знаю, не подходят для этой задачи, потому что у вас есть ограничение («Никакие дополнительные объекты не должны создаваться»). В противном случае вы можете использовать CharsetDecoder (как упомянуто Малькольмом). Или даже перейдите на темную сторону и используйте sun.io.ByteToCharUTF8 , если вам действительно нужен чисто статический метод. Но это не рекомендуемый способ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...