Как преобразовать строку 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
Java: Как вернуть true, если обрезанная строка в списке содержит строку?
Как вывести массив строк без использования цикла for?
Как сгенерировать случайную алфавитно-цифровую строку
Как объявить массив в одну строку?