byte []에서 문자열로, byte []에서 byte [] 로의 문자열 표현을 이해하려고 노력하고 있습니다 … 나는 byte []를 보낼 문자열로 변환 한 다음 웹 서비스 (파이썬으로 작성)를 기대합니다 클라이언트로 데이터를 바로 에코합니다.
Java 애플리케이션에서 데이터를 보낼 때 …
Arrays.toString(data.toByteArray())
보낼 바이트 ..
[B@405217f8
Send (이것은 내 바이트 데이터의 문자열 표현이어야하는 Arrays.toString ()의 결과입니다.이 데이터는 와이어를 통해 전송됩니다) :
[-47, 1, 16, 84, 2, 101, 110, 83, 111, 109, 101, 32, 78, 70, 67, 32, 68, 97, 116, 97]
파이썬 쪽에서 파이썬 서버는 호출자에게 문자열을 반환합니다 (볼 수있는 것은 서버에 보낸 문자열과 같습니다)
[-47, 1, 16, 84, 2, 101, 110, 83, 111, 109, 101, 32, 78, 70, 67, 32, 68, 97, 116, 97]
서버는이 데이터를 클라이언트로 반환해야합니다.
클라이언트가 (문자열로)받는 응답은 다음과 같습니다.
[-47, 1, 16, 84, 2, 101, 110, 83, 111, 109, 101, 32, 78, 70, 67, 32, 68, 97, 116, 97]
받은 문자열을 바이트로 되 돌리는 방법을 알 수없는 것 같습니다.]
내가 시도하는 것처럼 보이는 것은 다음과 같은 바이트 배열을 얻는 것입니다 …
[91, 45, 52, 55, 44, 32, 49, 44, 32, 49, 54, 44, 32, 56, 52, 44, 32, 50, 44, 32, 49, 48, 49, 44, 32, 49, 49, 48, 44, 32, 56, 51, 44, 32, 49, 49, 49, 44, 32, 49, 48, 57, 44, 32, 49, 48, 49, 44, 32, 51, 50, 44, 32, 55, 56, 44, 32, 55, 48, 44, 32, 54, 55, 44, 32, 51, 50, 44, 32, 54, 56, 44, 32, 57, 55, 44, 32, 49, 49, 54, 44, 32, 57, 55, 93]
또는 다음과 같은 바이트 표현을 얻을 수 있습니다.
B@2a80d889
둘 다 내 보낸 데이터와 다릅니다 … 나는 정말 간단한 것을 놓치고 있다고 확신합니다 ….
어떤 도움?
답변
반환 된 문자열을 가져 와서 문자열을 구성 할 수는 없습니다. byte[]
더 이상 데이터 형식 이 아니며 이미 문자열입니다. 구문 분석해야합니다. 예를 들면 다음과 같습니다.
String response = "[-47, 1, 16, 84, 2, 101, 110, 83, 111, 109, 101, 32, 78, 70, 67, 32, 68, 97, 116, 97]"; // response from the Python script
String[] byteValues = response.substring(1, response.length() - 1).split(",");
byte[] bytes = new byte[byteValues.length];
for (int i=0, len=bytes.length; i<len; i++) {
bytes[i] = Byte.parseByte(byteValues[i].trim());
}
String str = new String(bytes);
** 편집 **
당신은 당신이 “라고 질문에서 문제의 힌트를 얻을 Whatever I seem to try I end up getting a byte array which looks as follows... [91, 45, ...
“때문에, 91
의 바이트 값이 [
너무, [91, 45, ...
문자열의 바이트 배열입니다 ” [-45, 1, 16, ...
“문자열입니다.
이 메소드 Arrays.toString()
는 String
지정된 배열 의 표현을 리턴합니다 . 반환 된 값이 더 이상 배열이 아님을 의미합니다. 예를 들면 다음과 같습니다.
byte[] b1 = new byte[] {97, 98, 99};
String s1 = Arrays.toString(b1);
String s2 = new String(b1);
System.out.println(s1); // -> "[97, 98, 99]"
System.out.println(s2); // -> "abc";
보다시피 s1
, 배열 의 문자열 표현 b1
을 s2
유지하고에 포함 된 바이트 의 문자열 표현 을 유지합니다 b1
.
이제 문제에서 서버는와 비슷한 문자열을 반환 s1
하므로 배열 표현을 다시 얻으려면 반대 생성자 메서드가 필요합니다. s2.getBytes()
의 반대 인 경우 의 반대 new String(b1)
를 찾아야 Arrays.toString(b1)
하므로이 답변의 첫 번째 조각에 붙여 넣은 코드입니다.
답변
String coolString = "cool string";
byte[] byteArray = coolString.getBytes();
String reconstitutedString = new String(byteArray);
System.out.println(reconstitutedString);
콘솔에 “cool string”을 출력합니다.
꽤 쉽습니다.
답변
제가 한:
고객에게 반환 :
byte[] result = ****encrypted data****;
String str = Base64.encodeBase64String(result);
return str;
고객으로부터 받기 :
byte[] bytes = Base64.decodeBase64(str);
데이터는 다음 형식으로 전송됩니다.
OpfyN9paAouZ2Pw+gDgGsDWzjIphmaZbUyFx5oRIN1kkQ1tDbgoi84dRfklf1OZVdpAV7TonlTDHBOr93EXIEBoY1vuQnKXaG+CJyIfrCWbEENJ0gOVBr9W3OlFcGsZW5Cf9uirSmx/JLLxTrejZzbgq3lpToYc3vkyPy5Y/oFWYljy/3OcC/S458uZFOc/FfDqWGtT9pTUdxLDOwQ6EMe0oJBlMXm8J2tGnRja4F/aVHfQddha2nUMi6zlvAm8i9KnsWmQG//ok25EHDbrFBP2Ia/6Bx/SGS4skk/0couKwcPVXtTq8qpNh/aYK1mclg7TBKHfF+DHppwd30VULpA==
답변
어떤 Arrays.toString()
일은 당신이 ByteArray 각 바이트의 문자열 표현을 만드는 것입니다.
API 문서 배열 API를 확인하십시오
응답 문자열을 원래 바이트 배열로 다시 변환하려면 split(",")
또는 무언가 를 사용 하여 컬렉션으로 변환 한 다음 거기에있는 각 개별 항목을 바이트로 변환하여 바이트 배열을 다시 만들어야합니다.
답변
바이트 배열을 문자열로 변환하고 문자열을 Java에서 바이트 배열로 다시 변환하는 것은 간단합니다. 올바른 방법으로 ‘신규’를 사용해야하는시기를 알아야합니다. 다음과 같이 수행 할 수 있습니다.
바이트 배열을 문자열로 변환 :
byte[] bytes = initializeByteArray();
String str = new String(bytes);
문자열을 바이트 배열로 변환 :
String str = "Hello"
byte[] bytes = str.getBytes();
자세한 내용은 다음을 참조하십시오.
http://evverythingatonce.blogspot.in/2014/01/tech-talkbyte-array-and-string.html
답변
바이트 배열 ( [B@405217f8
) 에서보고있는 출력의 종류는 길이가 0 인 바이트 배열 (예 :)의 출력이기도합니다 new byte[0]
. 이 문자열은 일반 컬렉션의 toString()
메소드 에서 예상 할 수있는 것처럼 배열의 내용에 대한 설명이 아니라 배열에 대한 참조 인 것 같습니다 .
다른 응답자와 마찬가지로 바이트 배열의 내용에서 문자열을 구성하는 매개 변수를 String
허용하는 생성자를 알려 byte[]
줍니다. InputStream
TCP 연결에서 바이트를 얻으려면 소켓에서 원시 바이트를 읽을 수 있어야 합니다.
해당 바이트를 이미 String
(를 사용하여 InputStreamReader
) 읽은 경우 getBytes()
함수를 사용하여 문자열을 바이트로 변환 할 수 있습니다 . 원하는 문자 세트를 String 생성자와 getBytes()
함수 모두에 전달해야 합니다. 이는 바이트 데이터를로 문자로 변환 할 수있는 경우에만 작동합니다 InputStreamReader
.
원시 바이트를 처리하려면이 스트림 리더 계층을 사용하지 않아야합니다.
답변
바이트를 바이트로 보내거나 각 바이트를 문자로 변환하고 문자열로 보낼 수 있습니까? 11 바이트 만 보내면 문자열을 그대로 사용하면 문자열에 최소 85자를 사용할 수 있습니다. 바이트의 문자열 표현을 만들 수 있으므로 “[B @ 405217f8″이 되어 파이썬에서 bytes
또는 bytearray
객체 로 쉽게 변환 할 수 있습니다 . 실패하면 22자를 사용하는 일련의 16 진 숫자 ( “5b42403430353231376638”)로 표시 할 수 있으며,이를 사용하여 Python 측에서 쉽게 해독 할 수 있습니다 binascii.unhexlify()
.