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

Есть ли способ конвертировать 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 decpressor, который выглядит следующим образом.

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());
}

Ответ 1

Объектом, который требуется вашему методу 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, в зависимости от выбранной кодировки.

Ответ 2

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

Ответ 3

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

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

Ответ 4

Просто:

String abc="abcdefghight";

byte[] b = abc.getBytes();

Ответ 5

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

Ответ 6

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

Ответ 7

import java.io.UnsupportedEncodingException;
import java.util.Arrays;

public class ConvertStringtoByte {
    public static void main(String[] args) throws UnsupportedEncodingException {


    String givenString = "stackoverflow";
    System.out.println(givenString );


    byte[] byteValue = givenString .getBytes();

    System.out.println(Arrays.toString(byteValue ));


    byte[] byteValueAscii= letters.getBytes("US-ASCII");
    System.out.println(Arrays.toString(byteValueAscii));
    }
}

Ответ 8

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

Bool DmgrGetVersion (String szVersion);

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