1

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

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

在这里,消息是一个字符串,然后将其转换为字节,我猜是为了发送。但是当我检查日志时,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);
4

3 回答 3

11

是的,调用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);
于 2013-03-14T10:55:43.657 回答
1

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

String senddata=new String(send);
于 2013-03-14T10:55:00.557 回答
1

尝试:

Log.d("SEND_BYTE", new String(send, "UTF-8"););
于 2013-03-14T10:56:49.420 回答