我有一个名为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
答案 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
。