簡體   English   中英

getBytes然后toString不會每次給出相同的結果

[英]getBytes then toString don't give the same result each time

我正在嘗試使用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);

是的,在字節數組上調用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);

您需要創建一個新的字符串對象以獲取實際的字符串

String senddata=new String(send);

嘗試:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM