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

Java 流體系全景解析:輸入輸出、字節字符、節點處理、掃描器實戰

     編輯:Java 綜合教學

Java 流體系全景解析:輸入輸出、字節字符、節點處理、掃描器實戰

Java IO 流從不同維度可分類,掌握全景圖能讓你在面對文件讀寫、網絡通信、對象序列化等場景時秒級選型。本文結合類圖與實戰代碼,系統梳理流體系。

一、按流向分:輸入流 vs 輸出流(相對程序內存)

輸出流體系圖

輸入流體系圖

  • 輸出流:內存 → 目的地。核心抽象:OutputStream(字節)、Writer(字符)
  • 輸入流:源 → 內存。核心抽象:InputStream(字節)、Reader(字符)

二、按單位分:字節流 vs 字符流

常用流類圖

  • 字節流:處理單位 1 byte。頂級抽象 InputStream/OutputStream。適用所有文件(二進制/文本)。
  • 字符流:處理單位 1 char (2 bytes)。頂級抽象 Reader/Writer。僅適用文本文件,內部封裝編碼轉換。

三、四大核心抽象類實戰代碼模板

1. 字節輸出流 OutputStream

String path = "d:\\bbb.txt";
File file = new File(path);
// true = 追加模式,false/無參 = 覆蓋模式
FileOutputStream fos = new FileOutputStream(file, true);
String content = "這是要輸出到文本的內容";
byte[] bytes = content.getBytes("UTF-8"); // 顯式指定編碼
fos.write(bytes);
fos.close();

2. 字節輸入流 InputStream

String path = "d:\\bbb.txt";
File file = new File(path);
FileInputStream fis = new FileInputStream(file);
// 精確分配數組大小:文件長度即字節數
byte[] bytes = new byte[(int) file.length()];
fis.read(bytes);
fis.close();
String str = new String(bytes, "UTF-8");
System.out.println(str);

3. 字符輸出流 Writer(寫文本首選)

String path = "d://bbb.txt";
File file = new File(path);
FileWriter fw = new FileWriter(file, true); // 追加模式
fw.write("這是要輸入的內容"); // 直接寫字符串,無需轉 byte[]
fw.close();

4. 字符輸入流 Reader + Scanner(讀文本最強組合)

// 方案 A:Reader + char[](不推薦,長度難控制)
FileReader fr = new FileReader(file);
char[] chars = new char[100];
fr.read(chars);
fr.close();

// 方案 B:Scanner(推薦,按行讀取,自動處理編碼與換行)
Scanner sc = new Scanner(new File("d:\\bbb.txt"), "UTF-8");
while (sc.hasNextLine()) {
    System.out.println(sc.nextLine());
}
sc.close();

Scanner 讀取效果圖

四、緩衝流(處理流)—— 性能加速器

緩衝流本身無 IO 能力,包裝節點流提供內存緩衝區,減少系統調用,提升數量級性能。
字節緩衝:BufferedInputStream、BufferedOutputStream
字符緩衝:BufferedReader(神技 readLine())、BufferedWriter

詳細用法請參考:Java IO 緩衝流深度解析

五、選型速查表

場景推薦流關鍵點
讀寫圖片/視頻/二進制FileInputStream / FileOutputStream + Buffered必用字節流
讀寫文本/配置/源碼FileReader / FileWriter + Buffered字符流自動編碼
按行讀取文本BufferedReader.readLine() / ScannerScanner 更靈活
指定編碼讀寫文本InputStreamReader / OutputStreamWriter構造函數傳 charset
基本類型/對象序列化DataOutputStream / ObjectOutputStream實現 Serializable

總結

Java IO 流體系看似繁雜,實則遵循流向→單位→功能三層決策。牢記:二進制用字節流,文本用字符流,高頻加緩衝,按行用 Scanner。掌握四大抽象類實戰模板,應付 95% 業務場景綽綽有餘。

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