getBytes然后toString每次都不会给出相同的结果

时间:2013-03-14 10:52:37

标签: java android

我正在尝试使用Android的BlueToothChat示例,但有些内容我不明白:

byte[] send = message.getBytes();
Log.d("SEND_BYTE", send.toString());
mChatService.write(send);

这里,message是一个String,然后转换为字节,我猜是为了发送。但是当我检查日志时,即使我输入的消息很长,send.toString()部分也很短。更糟糕的是,如果我输入两次相同的消息,我会得到2个不同的日志,这真的很奇怪。 以下是我在日志中收到的消息hello,连续三次:

[B@413d62e0
[B@41390078
[B@413ed3d8

必须有一些(可能非常简单)我没有得到,但可以(弄清楚它是什么。你能帮我解决这个问题吗?

编辑: 也许添加以下代码很有用,所以这里是完整的代码:

byte[] send = message.getBytes();
Log.d("SEND_BYTE", send.toString());
mChatService.write(send);

// Reset out string buffer to zero and clear the edit text field (buffer is used in the write function)
mOutStringBuffer.setLength(0);
mOutEditText.setText(mOutStringBuffer);

3 个答案:

答案 0 :(得分:10)

是的,在字节数组上调用toString()是一个坏主意。数组不会覆盖toString(),因此您获得Object.toString()的默认行为。

要反转String.getBytes()来电,您需要:

Log.d("SEND_BYTE", new String(send));

或者更直接地查看字节:

Log.d("SEND_BYTE", Arrays.toString(send));

然而,我强烈建议您直接这样做。相反,您应该在转换为二进制或从二进制转换时指定编码,否则它将使用平台默认编码。聊天服务期望的编码是什么?例如,如果它期望UTF-8:

byte[] send = message.getBytes("UTF-8");
Log.d("SEND_BYTE", Arrays.toString(send));
mChatService.write(send);

答案 1 :(得分:1)

您需要创建一个新的字符串对象来获取实际的字符串

String senddata=new String(send);

答案 2 :(得分:1)

尝试:

Log.d("SEND_BYTE", new String(send, "UTF-8"););