首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java ByteArrayOutputStream toString() 亂碼原因:二進制數據非文本

     編輯:程式設計疑難解答

現象

ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
dos.writeBoolean(true);
dos.writeDouble(2.345);
String s = baos.toString(); // 輸出亂碼 "@~oq?P"

原因

toString() 默認用平台默認字符集(如 UTF-8)將原始字節解碼為字符串。但 DataOutputStream 寫入的是二進制格式(布爾 1 字節、double 8 字節 IEEE 754),非文本編碼,強行解碼當然亂碼。

正確用法

  1. 獲取字節數組:byte[] bytes = baos.toByteArray();
  2. 網絡傳輸/文件存儲直接用字節數組
  3. 需調試時,按協議解析:
    DataInputStream dis = new DataInputStream(new ByteArrayInputStream(bytes));
    boolean b = dis.readBoolean();
    double d = dis.readDouble();

適用場景

ByteArrayOutputStream 適合二進制協議組裝、內存中序列化,不適合直接轉字符串顯示。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved