Как преобразовать строку Java в byte[]?
Здравствуйте! У меня возникла проблема с преобразованием строки в массив байтов в 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 ответ(ов)
Объект, который вашему методу 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[]
вы получите различное количество байтов в зависимости от выбранной кодировки для данной строки.
Попробуйте использовать метод String.getBytes()
. Он возвращает массив байтов (byte[]
), представляющий данные строки.
Вот пример:
String data = "sample data";
byte[] byteData = data.getBytes();
Убедитесь, что вы учитываете кодировку, если это важно для вашего случая. Например, вы можете указать кодировку, передав её в качестве аргумента:
byte[] byteData = data.getBytes("UTF-8");
Для того чтобы получить байтовый массив из строки в Java, вы можете использовать метод getBytes()
. Вот простой пример:
String abc = "abcdefghight";
byte[] b = abc.getBytes();
В этом коде строка abc
преобразуется в массив байтов b
. Метод getBytes()
использует стандартную кодировку (обычно UTF-8), чтобы представлять каждый символ строки как последовательность байтов. Если вам нужна конкретная кодировка, вы можете передать её в метод, так:
byte[] b = abc.getBytes(StandardCharsets.UTF_8);
Это обеспечит, что вы будете получать байты в указанной кодировке.
Чтобы преобразовать строку в байтовый массив в 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);
Это обеспечит правильное преобразование, даже если строка содержит специальные символы.
Вы можете использовать метод String.getBytes()
, который возвращает массив byte[]
.
Преобразование 'ArrayList<String>' в 'String[]' в Java
Как сгенерировать случайную алфавитно-цифровую строку
Как узнать, содержится ли определенная строка в массиве на JavaScript/jQuery?
Как объявить массив в одну строку?
Как преобразовать jsonString в JSONObject в Java?