Java将字符串字节转换为可读字符串

时间:2013-01-22 19:52:47

标签: java string byte

  

可能重复:
  Java Byte Array to String to Byte Array

我有一个名为READ()的方法,它接受一个String参数。此字符串已被转换为字节。我想要的只是转换成一个可读的字符串。

public static String READ(final String data) throws UnsupportedEncodingException{
   char[] temp = data.toCharArray();
   byte[] bytes = new byte[temp.length];
   int i = 0;

   for(char c : temp){
      bytes[i++] = (byte)c;
   }

   return new String(bytes, "UTF-8");
}

public static String SEND(String data) throws UnsupportedEncodingException{
   return data.getBytes()+"";
}

测试:

String msg = "testing !";
String msgBytes = null;
   try {
        msgBytes = SEND(msg);
   } catch (UnsupportedEncodingException e2) {
        e2.printStackTrace();
   }

   System.out.println( "SEND: " + msgBytes);
   try {
         System.out.println("RECEIVE: " + READ(msgBytes));
   } catch (UnsupportedEncodingException e2) {
            e2.printStackTrace();
   }

输出是:

  

发送:[B @ 452467ec

     

RECEIVE:[B @ 452467ec

2 个答案:

答案 0 :(得分:2)

String有一个以byte[]为参数的构造函数。

  

String(byte [] bytes) -            通过使用平台的默认字符集解码指定的字节数组构造一个新的String。

     

String(byte [] bytes,Charset charset) -            通过使用指定的字符集解码指定的字节数组构造一个新的String。

所以打印出来就像这样:

System.out.println(new String(msgBytes, "UTF-8"));

您当前看到的是默认值Object.toString(),它会打印字节数组的内存引用(所有数组都从Object扩展而来)。

答案 1 :(得分:1)

您打印的byte[]Object,因此它只会将引用打印到Object的内存中,因为这是toString()的默认实现。< / p>

您应该直接打印String。不要打印其byte[]表示。

您在代码中执行的操作是将String转换为byte[],然后以错误的方式转换回String