Java将字符串字节转换为可读字符串
可能重复:Java将字符串字节转换为可读字符串,java,string,byte,Java,String,Byte,可能重复: 我有一个名为READ()的方法,它接受字符串参数。此字符串已被转换为字节。我只想把它转换成可读的字符串 public static String READ(final String data) throws UnsupportedEncodingException{ char[] temp = data.toCharArray(); byte[] bytes = new byte[temp.length]; int i = 0; for(c
我有一个名为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
具有将字节[]
作为参数的构造函数
字符串(字节[]字节)--
通过使用平台的默认字符集对指定的字节数组进行解码来构造新字符串
字符串(字节[]字节,字符集字符集)--
通过使用指定的字符集对指定的字节数组进行解码来构造新字符串
因此,请按如下方式打印:
System.out.println(new String(msgBytes, "UTF-8"));
您当前看到的是一个默认的
对象.toString()
,它打印对字节数组的内存引用(所有数组都从对象扩展而来)。您打印一个字节[]
是一个对象
,因此它只是将引用打印到该对象的内存中,因为toString()的默认实现就是这样做的
您应该直接打印字符串
。不要打印其字节[]
表示形式
您在代码中所做的是将字符串
转换为字节[]
,然后以错误的方式返回到字符串。我知道,但问题是READ()接受如下字符串:[B@452467ec,这不是字节数组,而是字符串。我只想把它转换成可读的字符串,我想输出“正在测试!”如果READ收到了字符串化的引用,那么将其转换回可读字符串是不明智的。该字符串只显示“地址0x452467ec处的字节数组”“,此时您已经丢失了所有其他信息。您需要修复发送该字符串以读取的内容。我使用eclipse RCP制作了一个聊天应用程序。我正在向客户端/服务器发送一个字节块(使用SEND()方法,将字符串转换为字节数组)。当我在客户端/服务器端读取流时,我正在读取”[B@452467ec".这就是我要转换回字符串的内容[B@452467ec是一个字节数组,当您打印它时,它会调用Objec.toString()来打印对字节数组的内存引用。请尝试一下我的示例。正如我刚才所说的,不可能转换数组的默认字符串表示形式(即Object.toString())返回到字符串中。客户端行为不正常,必须修复。在客户端调用“new String(array,charset)”(永远不要使用new String的单参数形式)。好的,我应该如何将其转换为可读字符串?String msg=“testing!”;难道“testing!”可读性不够吗?