프로그래밍 언어/JAVA

Java String을 byte []로 변환하는 방법

Rateye 2021. 9. 2. 11:29
728x90
반응형
질문 : Java String을 byte []로 변환하는 방법은 무엇입니까?

자바로 변환 할 수있는 방법이 있나요 String A와 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

두 번째는 주소입니다. 내가 뭘 잘못하고 있니? 다음과 같이 gzip 압축 해제기에 제공하려면 byte[] 에 결과가 필요합니다.

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

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() 결과에서 [B@38ee9f13 , [Bbyte[] 의미하고 38ee9f13 @ 구분 된 메모리 주소입니다.

표시 목적으로 다음을 사용할 수 있습니다.

Arrays.toString(bytes);

그러나 이것은 쉼표로 구분 된 정수의 시퀀스로 표시 될 뿐이며 원하는 것이 아닐 수도 있습니다.

byte[] 에서 읽을 수있는 String 다시 얻으려면 다음을 사용하십시오.

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

Charset 버전이 선호되는 이유는 String 객체가 내부적으로 UTF-16으로 저장되기 때문입니다. byte[] 로 변환 할 때 선택한 문자 세트에 따라 String 의 주어진 글리프에 대해 다른 바이트 분석을 얻을 수 있습니다.

출처 : https://stackoverflow.com/questions/18571223/how-to-convert-java-string-into-byte
728x90
반응형