2012-02-20 4 views
0

문제가 있습니다.문자열의 바이트 []에서 문자열로?

문자열 형식의 소켓을 통해 데이터를 보냈습니다. 일부 문자열을 사용하여 문자열 [[[email protected]]에 바이트 []을 가져 왔습니다. 자, 제 질문은 이것이 문자열이라는 것입니다. String result = new String(byteArray);을 사용할 수있는 바이트 배열로 다시 변환하려면 어떻게해야합니까?

String을 byte []로 변환하려고 시도했지만 허용되지 않습니다.

byte[] all = Files.readAllBytes(f.toPath()); 
    this.out.println(destinationOfFile + "/" + file.getName() + "*" + all); 

그리고이 : 구글 만 (이미 바이트이기 때문에 내가 사용할 수 없습니다) 보통 .getBytes()와 새로운 String (someByteArray)

이 전송되는 무슨입니다 함께했다 받은 내용 :

private void writeToFile(String str) { 
     String file = str.substring(0, str.indexOf("*")); 
     String write = str.substring(str.indexOf("*")+1); 

편집 : 나는 다른 방식으로 처리했습니다. 파일에서 모든 바이트를 가져 오는 대신 소켓을 통해 각 행을 전송하여 줄 단위로 읽지 않습니다. 클라이언트에서는 HashMap에 데이터를 저장하고 "Done sending File"을 받으면 모든 문자열을 파일에 씁니다.

+0

byte []. toString()'은 유용한 것을 생성하지 않습니다; 이것은 되돌릴 수있는 작업이 아닙니다. 임의의 바이트 배열을 문자열로 변환하지 마십시오. Java'char'는 C'char'가 아닙니다. – McDowell

+0

McDowell 내가 C 문자를 사용한다고 생각하게 만드는 이유는 무엇입니까? – Lolmewn

+0

나는 그렇지 않다. 그러나 C와 같은 언어는 옥텟과 문자 유형을 결합하여 데이터를 손상시키지 않으면 서 'byte'배열을 Java 문자열로 안전하게 변환 할 수 있다고 가정합니다. _ 문자가 실제로 문자 데이터 인 경우, 바이트 데이터 인 경우 _ Java는 이진 안전 문자열을 가지고 있지 않습니다. 바이트 배열을 사용하십시오. – McDowell

답변

2

이 코드를 사용하여 String-Byte []를 변환하고 있지만 소스 또는 자바 문자열로 rawBytes가 있는지 모르기 때문에 도움이되는지 확신 할 수 없습니다. 명확히 해 주시겠습니까?

public static String byteToHexString(byte b) { 
    String result = ""; 
    result += Integer.toHexString((int)(b >> 4) & 0xf); 
    result += Integer.toHexString((int)(b) & 0xf); 
    return result; 
} 

public static String bytesToHexString(final byte[] byteArray) { 
    if (byteArray == null) { 
     return null; 
    } 
    String result = ""; 
    for (int i = 0; i < byteArray.length; ++i) { 
     result += byteToHexString(byteArray[i]); 
    } 
    return result; 
} 

public static byte[] hexStringToBytes(final String hexString) { 
    if (hexString == null) { 
     return null; 
    } 
    byte[] result = new byte[hexString.length()/2]; 
    for (int idx = 0; idx < result.length; ++idx) { 
     int strIdx = idx * 2; 
     result[idx] = (byte) ((Character.digit(hexString.charAt(strIdx), 16) << 4) 
       + Character.digit(hexString.charAt(strIdx + 1), 16)); 
    } 
    return result; 
} 

편집 : 당신이 문자열 바이트 [] 바이트 []를 변환하는 경우 - 문자열 나는 ​​()와 문자열 - 생성자하는 String.getBytes의 캐릭터 세트 또는 charsetname 매개 변수를 사용하는 것이 좋습니다 것입니다. 예 :

byte[] bytes = "text".getBytes("UTF-8"); 
String text = new String(bytes, "UTF-8"); 

모든 플랫폼 또는 jvm이 동일한 문자 세트를 지원할 수있는 것은 아닙니다. 문자 세트 목록은 here을 참조하십시오.

파일에서 바이트를 읽고 String으로 해석하려는 경우 올바른 문자 세트 사용에 신경 써야합니다.

+0

빨리 시도 할 것입니다! 이것은 나에게 좋은 물건처럼 보인다 :) – Lolmewn

3

문자열에 원시 바이트를 저장하려면이 목적으로 설계된 인코딩 (예 : Base64)을 사용해야합니다. Commons Codec 라이브러리 및 Base64 클래스를 살펴보십시오.

관련 문제