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

Java I/O 流:字符與字節的區別與轉換理解

     編輯:程式設計疑難解答

「Java 中字符是 Unicode 雙字節,InputStream 處理字節,不適合處理字符文本」——這句話的含義:

核心概念

  • char / String:內存中用 UTF-16(雙字節)編碼,包含所有語言字符。
  • byte / InputStream:磁盤、網絡傳輸的最小單位是字節(8 位),無編碼概念。
  • 編碼/解碼:char ↔ byte 需指定 Charset(UTF-8, GBK 等)。Reader/Writer 是橋樑。

為什麼要轉換流?

// 字節流 → 字符流
InputStream is = new FileInputStream("a.txt");
Reader reader = new InputStreamReader(is, "UTF-8"); // 指定編碼
BufferedReader br = new BufferedReader(reader);
String line = br.readLine(); // 直接讀字符行

若直接用 InputStream.read() 讀中文,會按字節拆分導致亂碼;轉換流自動按編碼組裝字符。

最佳實踐

  • 處理文本文件:優先用 Reader/Writer 族(FileReader、BufferedReader、PrintWriter)。
  • 處理二進制(圖片、視頻、序列化對象):用 InputStream/OutputStream 族。
  • 明確指定編碼:new InputStreamReader(is, StandardCharsets.UTF_8),避免平台預設編碼差異。

理解「字符在內存,字節在外部,編碼是橋樑」是 Java I/O 入門關鍵。

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