it-roy-ru.com

Как преобразовать Java String в байт []?

Есть ли способ преобразовать 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());

и я получаю отдельные выводы. Невозможно отобразить 1-й вывод, так как это строка gzip.

<A Gzip String>
******
[[email protected]

Второй адрес. Что-то я делаю не так? Мне нужен результат в 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());
}
481
Mkl Rjv

Объект, в котором нуждается ваш метод decompressGZIP(), является byte[].

Итак, основной технический ответ на заданный вами вопрос:

byte[] b = string.getBytes();
byte[] b = string.getBytes(Charset.forName("UTF-8"));
byte[] b = string.getBytes(StandardCharsets.UTF_8); // Java 7+ only

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

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

Arrays.toString(bytes);

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

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

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

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

875
Stewart
  String example = "Convert Java String";
  byte[] bytes = example.getBytes();
49
Prabhakaran

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

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

Просто:

String abc="abcdefghight";

byte[] b = abc.getBytes();
14
Bhavesh

Вы можете использовать функцию String.getBytes(), которая возвращает массив byte[].

10
Vimal Bera

Вы можете попробовать return new String(byteout.toByteArray(Charset.forName("UTF-8")))

7
Lucas Hoepner

Нет необходимости изменять Java как параметр String. Вы должны изменить код c, чтобы получить строку без указателя и в своем коде:

Bool DmgrGetVersion (String szVersion);

Char NewszVersion [200];
Strcpy (NewszVersion, szVersion.t_str ());
.t_str () applies to builder c ++ 2010
1
Yardack