1

Android のサンプル BlueToothChat を使用しようとしていますが、理解できないことがあります。

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

ここで、メッセージは文字列であり、送信するためにバイトに変換されます。しかし、ログを確認すると、send.toString()入力したメッセージは長くても、その部分は本当に短いです。さらに悪いことに、同じメッセージを 2 回入力すると、2 つの異なるログが表示されます。これは非常に奇妙なことです。これは、メッセージのログにhello3回連続して表示されるものです。

[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

試す:

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

実際の文字列を取得するには、新しい文字列オブジェクトを作成する必要があります

String senddata=new String(send);
于 2013-03-14T10:55:00.557 に答える