Конвертировать byte [] в String, используя двоичное кодирование - PullRequest
4 голосов
/ 07 декабря 2011

Я хочу перевести каждый byte из byte[] в char, а затем поместить эти символы в строку.Это так называемое «двоичное» кодирование некоторых баз данных.Пока что лучшее, что я смог найти, это огромный шаблон:

byte[] bytes = ...;
char[] chars = new char[bytes.length];
for (int i = 0; i < bytes.length; ++i) {
    chars[i] = (char) (bytes[i] & 0xFF);
}
String s = new String(chars);

Есть ли другой вариант от Java SE или, возможно, от Apache Commons?Я хотел бы иметь что-то вроде этого:

final Charset BINARY_CS = Charset.forName("BINARY");
String s = new String(bytes, BINARY_CS);

Но я не хочу писать Charset и их кодеки (пока).Есть ли такой готовый двоичный кодировщик в JRE или в Apache Commons?

Ответы [ 4 ]

9 голосов
/ 07 декабря 2011

Вы можете использовать кодировку ASCII для 7-битных символов

String s = "Hello World!";
byte[] b = s.getBytes("ASCII");
System.out.println(new String(b, "ASCII"));

или 8-битной ascii

String s = "Hello World! \u00ff";
byte[] b = s.getBytes("ISO-8859-1");
System.out.println(new String(b, "ISO-8859-1"));

РЕДАКТИРОВАТЬ

System.out.println("ASCII => " + Charset.forName("ASCII"));
System.out.println("US-ASCII => " + Charset.forName("US-ASCII"));
System.out.println("ISO-8859-1 => " + Charset.forName("ISO-8859-1"));

печать

ASCII => US-ASCII
US-ASCII => US-ASCII
ISO-8859-1 => ISO-8859-1
1 голос
/ 07 декабря 2011

Вы можете пропустить шаг массива символов и вставить String и даже использовать StringBuilder (или StringBuffer, если вас беспокоит многопоточность). Мой пример показывает StringBuilder.

byte[] bytes = ...;
StringBuilder sb = new StringBuilder(bytes.length);
for (int i = 0; i < bytes.length; i++) {
  sb.append((char) (bytes[i] & 0xFF));
}

return sb.toString();

Я знаю, что это не отвечает на ваш другой вопрос. Просто пытаюсь помочь с упрощением кода «шаблона».

0 голосов
/ 07 декабря 2011

Вы можете использовать кодировку base64. Существует реализация, выполненная apache

http://commons.apache.org/codec/

База 64 http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Base64.html

0 голосов
/ 07 декабря 2011

Существует конструктор String, который принимает массив байтов и строку, определяющую формат байтов:

String s = new String(bytes, "UTF-8");   // if the charset is UTF-8
String s = new String(bytes, "ASCII");   // if the charset is ASCII
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...