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

《Thinking in Java》第12章筆記:I/O 系統深度解析

     編輯:Java 相關知識

File 類:不只是文件

  • 代表文件路徑或目錄,list() 返回 String[],固定長度優於集合。
  • FilenameFilter 實現目錄過濾,配合正則表達式匹配文件名(無路徑信息)。
  • 匿名內部類簡化一次性過濾器編寫,但需注意 final 限制與可讀性權衡。
  • 功能延伸:創建目錄、檢查屬性、重命名/移動 (renameTo)。

流抽象:I/O 的統一語言

  • 流隱藏設備細節,分輸入/輸出兩大體系。
  • 核心方法:read()/write() 處理單字節/字節數組。
  • 裝飾器模式:通過層層包裝組合功能(緩衝、轉換、格式化),導致「創建一個流需多個對象」的複雜性。

字節流體系 (InputStream/OutputStream)

節點流(數據源/目的地)

  • ByteArrayInputStream/OutputStream:內存緩衝區
  • FileInputStream/OutputStream:文件
  • PipedInputStream/OutputStream:線程間管道
  • SequenceInputStream:合併多流

處理流(裝飾器)

  • DataInputStream/DataOutputStream:基本類型/String 可攜序列化(UTF-8 編碼 String)
  • BufferedInputStream/OutputStream:緩衝,大幅提升性能
  • LineNumberInputStream:行號追蹤(編譯器專用)
  • PushbackInputStream:一字節回退(掃描器專用)
  • PrintStream:格式化輸出,捕獲所有 IOException 需手動 checkError(),國際化/換行處理弱,已被 PrintWriter 取代。

字符流體系 (Reader/Writer) —— 為國際化而生

  • 不替代字節流,補充 Unicode 字符支持(Java char 為 16 位 Unicode)。
  • 適配器:InputStreamReader/OutputStreamWriter 橋接兩體系。
  • 對應關係:FileReader/Writer、CharArrayReader/Writer、PipedReader/Writer。

字符流裝飾器

  • BufferedReader/Writer:緩衝 + readLine()
  • LineNumberReader:替代過時的 LineNumberInputStream
  • PushbackReader、StreamTokenizer、PrintWriter(自動 flush 選項、構造器兼容 OutputStream)。

鐵律:棄用 DataInputStream.readLine(),必用 BufferedReader.readLine()。

特立獨行:RandomAccessFile

  • 實現 DataInput/DataOutput,但不繼承 InputStream/OutputStream。
  • 隨機訪問核心:seek() 定位、getFilePointer()、length()。
  • 模式:"r" 唯讀、"rw" 讀寫(無僅寫)。
  • JDK 1.4 NIO 內存映射文件 已大幅取代其場景。

常用 I/O 組合最佳實踐

  1. 讀文本文件:new BufferedReader(new FileReader(file))
  2. 讀內存字符串:StringReader + read() 轉 char
  3. 讀格式化數據:DataInputStream + ByteArrayInputStream,用 available() 或異常判斷結束
  4. 寫文本文件:new BufferedWriter(new FileWriter(file)),必調用 close() flush 緩衝
  5. 數據存儲/恢復:DataOutputStream 寫、DataInputStream 讀,跨平台無憂,String 用 writeUTF/readUTF
  6. 隨機文件:RandomAccessFile 或 NIO MappedByteBuffer

管道流與標準 I/O

  • 管道流:PipedInput/OutputStream、PipedReader/Writer,線程間通信專用(需多線程基礎)。
  • 標準 I/O:System.in/out/err。in 需包裝 InputStreamReader → BufferedReader;out 可轉 PrintWriter 雙參構造器啟用自動 flush。
  • 重定向:System.setIn/Out/Err,處理字節流而非字符流。

實用工具類:TextFile

封裝 read/write 為靜態方法,支持整文件字符串讀寫、按行存入 ArrayList 處理,極大簡化日常文本操作。

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