6

Как преобразовать строку Java в byte[]?

16

Здравствуйте! У меня возникла проблема с преобразованием строки в массив байтов в Java. Я пытаюсь конвертировать String в byte[] (не в Byte[]), но сталкиваюсь с трудностями.

Выполняя следующий код:

System.out.println(response.split("\r\n\r\n")[1]);
System.out.println("******");
System.out.println(response.split("\r\n\r\n")[1].getBytes().toString());

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

<A Gzip String>
******
[B@38ee9f13

Проблема в том, что мне нужно получить результат в формате byte[], чтобы передать его в декомпрессор gzip. Ниже приведен код декомпрессора:

String decompressGZIP(byte[] gzip) throws IOException {
    java.util.zip.Inflater inf = new java.util.zip.Inflater();
    java.io.ByteArrayInputStream bytein = new java.io.ByteArrayInputStream(gzip);
    java.util.zip.GZIPInputStream gzin = new java.util.zip.GZIPInputStream(bytein);
    java.io.ByteArrayOutputStream byteout = new java.io.ByteArrayOutputStream();
    int res = 0;
    byte buf[] = new byte[1024];
    while (res >= 0) {
        res = gzin.read(buf, 0, buf.length);
        if (res > 0) {
            byteout.write(buf, 0, res);
        }
    }
    byte uncompressed[] = byteout.toByteArray();
    return (uncompressed.toString());
}

Что я делаю не так? Как мне правильно получить byte[] из строки?

5 ответ(ов)

10

Объект, который вашему методу decompressGZIP() требуется, — это массив байтов (byte[]).

Таким образом, основной, технический ответ на ваш вопрос будет следующим:

byte[] b = string.getBytes();
byte[] b = string.getBytes(Charset.forName("UTF-8"));
byte[] b = string.getBytes(StandardCharsets.UTF_8); // только Java 7 и выше

Однако, похоже, что проблема, с которой вы сталкиваетесь, заключается в том, что это отображается не очень хорошо. Вызов toString() просто вернет вам строку по умолчанию для Object, которая состоит из имени класса и адреса в памяти. В вашем результате [B@38ee9f13, [B означает byte[], а 38ee9f13 — это адрес в памяти, разделенный символом @.

Для отображения вы можете использовать:

Arrays.toString(bytes);

Но это просто выведет последовательность целых чисел, разделенных запятыми, что может вам не подойти.

Чтобы получить читаемую строку (String) из массива байтов (byte[]), используйте:

String string = new String(byte[] bytes, Charset charset);

Причина, по которой версия с Charset предпочтительнее, заключается в том, что все объекты String в Java хранятся внутренне в кодировке UTF-16. При преобразовании в byte[] вы получите различное количество байтов в зависимости от выбранной кодировки для данной строки.

0

Попробуйте использовать метод String.getBytes(). Он возвращает массив байтов (byte[]), представляющий данные строки.

Вот пример:

String data = "sample data";
byte[] byteData = data.getBytes();

Убедитесь, что вы учитываете кодировку, если это важно для вашего случая. Например, вы можете указать кодировку, передав её в качестве аргумента:

byte[] byteData = data.getBytes("UTF-8");
0

Для того чтобы получить байтовый массив из строки в Java, вы можете использовать метод getBytes(). Вот простой пример:

String abc = "abcdefghight";
byte[] b = abc.getBytes();

В этом коде строка abc преобразуется в массив байтов b. Метод getBytes() использует стандартную кодировку (обычно UTF-8), чтобы представлять каждый символ строки как последовательность байтов. Если вам нужна конкретная кодировка, вы можете передать её в метод, так:

byte[] b = abc.getBytes(StandardCharsets.UTF_8);

Это обеспечит, что вы будете получать байты в указанной кодировке.

0

Чтобы преобразовать строку в байтовый массив в Java, вы можете использовать метод getBytes() класса String. Вот пример кода:

String example = "Convert Java String";
byte[] bytes = example.getBytes();

В этом примере переменная example содержит строку "Convert Java String". Метод getBytes() вызывается на строке, и он возвращает массив байтов, который представляет данную строку в кодировке по умолчанию (обычно это UTF-8).

Если вам нужно использовать конкретную кодировку, вы можете передать название кодировки в метод getBytes(), например:

byte[] bytes = example.getBytes(StandardCharsets.UTF_8);

Это обеспечит правильное преобразование, даже если строка содержит специальные символы.

0

Вы можете использовать метод String.getBytes(), который возвращает массив byte[].

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь