我正在尝试使用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);
答案 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"););