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

Java I/O 流:字節流與字符流的區別與選擇

     編輯:程式設計綜合問答

核心概念

  • 字節流(InputStream/OutputStream):以 **字節(byte,8 位)** 為單位讀寫,**不轉換編碼**,處理二進制數據(圖片、視頻、壓縮包、序列化對象)。
  • 字符流(Reader/Writer):以 **字符(char,Java 內部 UTF-16,2 字節)** 為單位讀寫,**自動處理編碼轉換**(文件編碼 ↔ UTF-16),處理文本文件(XML、JSON、CSV、日誌)。

「8 位字節流」理解

「一次讀 8 位」即**每次讀取 1 個 byte**(read() 返回 int 0~255 或 -1)。緩衝流(BufferedInputStream)內部會批量讀取填充緩衝區,但對外接口仍是逐字節或逐字節數組。

選擇原則

場景推薦流理由
圖片/視頻/二進制文件字節流無編碼概念,逐字節拷貝保證位級精確
文本文件(中文/多語言)字符流 + 指定編碼自動完成 GBK/UTF-8 → UTF-16 轉換,避免亂碼
網絡通信協議字節流協議通常定義二進制幀結構
控制台輸入輸出字符流System.in/out 本質是字符流

轉換橋樑

// 字節流 → 字符流(指定源編碼)
InputStreamReader isr = new InputStreamReader(new FileInputStream("gbk.txt"), "GBK");
BufferedReader br = new BufferedReader(isr);

// 字符流 → 字節流(指定目標編碼)
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("utf8.txt"), "UTF-8");
BufferedWriter bw = new BufferedWriter(osw);

理解「字節是存儲/傳輸單位,字符是內存處理單位」,選擇流類型即清晰明了。

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