4

可能重复:
Java 字节数组到字符串到字节数组

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

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

接收:[B@452467ec

4

2 回答 2

2

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

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

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

所以像这样打印它:

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

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

于 2013-01-22T19:55:34.773 回答
1

您打印 a byte[]which is an Object,所以它只是将引用打印到内存中,Object因为这是默认实现的toString()作用。

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

您在代码中所做的是将 aString转换为byte[]然后以String错误的方式返回。

于 2013-01-22T19:56:20.993 回答