Как преобразовать строку 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