[英]Java - Why String( a).getBytes() == a not give the same result?
[英]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.