2014-11-03 6 views
-2

문자열 배열을 Byte 배열로 변환하고 다음 코드를 사용하여 문자열로 변환하려고합니다.Java : CSV 문자열에서 바이트 배열

바이트가 -128에서 127 사이에있을 때 잘 작동하지만 바이트가 0에서 256 사이 (예 : 133 또는 155 등) 인 경우 127보다 큰 값을 변환하려고 시도합니다.

java.lang.NumberFormatException: Value out of range. value:"133"

String response = "[-47, 1, 16, 84, 2, 101, 110, 83, 111, 109, 101, 32, 78, 70, 67, 32, 68, 97]"; 
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.valueof(byteValues[i].trim());  
} 

String str = new String(bytes); 

어떤 도움

!

+0

입력을 부호없는 바이트로 처리하려는 것 같습니다. 그럼 -47로 무엇을 할 거니? – Boann

+0

실제로 .NET을 사용하여 .doc, .docx 파일을 바이트 배열로 변환하고 WCF 서비스를 통해 응답을 반환합니다. 안드로이드, 응용 프로그램에서 바이트 배열을 디코딩하여 해당 파일을 표시합니다. 그래서 127, 127, 127, 127 등의 값을 포함하는 바이트 배열 –

+0

해당 값에서 문자열을 검색하는 방법 –

답변

0

값이 127보다 크면 int 데이터 유형에 저장해야합니다. 바이트를 afaik에 저장하는 방법.

+0

int 데이터 형식에 저장하는 경우 해당 바이트에서 정확한 문자열을 가져올 수 없습니다. –

+0

다른 방법은 없습니까? 짧지 않아요, char, long? – ControlAltDel

+0

@ControlAltDel 불량입니다. 잘못 말하고 수정했습니다. –

0

자바의 "바이트"유형은 불행히도 서명되었습니다. (0 ~ 255) 부호없는 바이트 값을 저장하는 데 사용하려면 int를 사용하고 바이트로 잘라 저장할 때 : (0xFF를 함께

bytes[i] = (byte)Integer.parseInt(byteValues[i].trim()); 

을 원래 부호 값을 복구하려면, 어느 부호없는 방식으로 int에 캐스트합니다.) 예 : 사용자의 입력 배열의 -47이 맥락에서 이해되지 않는다, 256로 해석됩니다

for (byte b : bytes) { 
    System.out.println(b & 0xFF); 
} 

- 47 = 209


편집 : 때문에, new String(bytes)가 안전하지 않은 생성자 그것은 불특정 문자 집합을 사용합니다. 대신, 당신이 사용하고있는 특정 문자 세트를 지정하십시오. 예 : 자바 문서 당

String str = new String(bytes, java.nio.charset.StandardCharsets.UTF_8); 
+0

나는이 시도했다 그러나 내 문제는 바이트 배열 0에서 128 사이에있을 때 올바른 문자열 가져 오는 바이트 배열을 디코딩 할 경우 0에서 256 포함 된 바이트 배열 서버 응답을 가져 오는 중입니다. 그리고 ????? 만약 바이트가 127보다 더 좋아. 문자열을 수정하기 위해 그 바이트를 디코딩하는 방법 또는 바이트 배열 대신에 어떤 방법이든. –

+0

@VinayKrishna 서버가 데이터 인코딩에 사용하는 문자 집합과 동일한 문자 집합을 사용하여 데이터를 디코딩해야합니다. – Boann

1

가하는 바이트가 "8 비트 2의 보수 부호있는 정수"로 구현되는 원시 바이트에 의해 뒷받침이 127 -128의 최대 범위를 가지고 있으며, 어떤을 처리 할 수 ​​없습니다 다른 값. (부호 표시) -

http://docs.oracle.com/javase/7/docs/api/java/lang/Byte.html

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

+0

더 중요한 것은 charset을 유효한 문자로 실제로 음수를 읽을 수있는 것으로 설정하지 않은 경우입니다. 그와 같은 부호있는 정수에서 문자열을 작성하면 유효한 문자열이 생성되지 않습니다. – Malchia7

0

바이트는 단지 127 (12^7)까지의 값을 가질 수있다.