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

Java IO 基石:徹底理解 InputStream 與 OutputStream

     編輯:Java 相關知識

初學者常見誤區

名字誤導:
InputStream → 以為有「寫入」方法 (輸入不就是寫進來嗎?) → 實際只有 read()。
OutputStream → 以為有「讀取」方法 (輸出不就是讀出去嗎?) → 實際只有 write()。

正確心智模型

  • InputStream (輸入流):將數據源 (文件、網絡、內存) 封裝為可讀取的流,程序通過 read() 從流中吸入數據。
    「輸入」= 數據流入程序。
  • OutputStream (輸出流):將數據目的地 封裝為可寫入的流,程序通過 write() 向流中吐出數據。
    「輸出」= 數據流出程序。

核心方法對比

裝飾者模式擴展功能

基礎流只處理字節,通過包裝器賦予高級能力:

// 緩衝提升性能
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("a.txt"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("b.txt"));

// 數據類型轉換
DataInputStream dis = new DataInputStream(bis);  // readInt(), readUTF()...
DataOutputStream dos = new DataOutputStream(bos); // writeInt(), writeUTF()...

// 對象序列化
ObjectInputStream ois = new ObjectInputStream(bis);
ObjectOutputStream oos = new ObjectOutputStream(bos);

字符流橋接

字節流 → 字符流:InputStreamReader / OutputStreamWriter (指定編碼)。
再包裝 BufferedReader / BufferedWriter 實現按行讀寫。

關鍵最佳實踐

  1. try-with-resources (JDK 7+) 自動關閉,防洩漏。
  2. 大文件用緩衝流 (8KB+),避免頻繁系統調用。
  3. 指定編碼 (UTF-8),杜絕平台默認編碼差異。
  4. 序列化類實現 Serializable,注意 serialVersionUID 維護。
  5. 網絡流注意「半包/粘包」,應用層協議定界 (長度首部/分隔符)。

總結

站在程序視角:Input = 讀 (read),Output = 寫 (write)。建立正確模型,IO 開發不再迷茫。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
流類型核心方法語義典型子類
InputStreamread() / read(byte[])從流讀取字節到程序FileInputStream, ByteArrayInputStream, Socket.getInputStream()
OutputStreamwrite(int) / write(byte[])從程序寫入字節到流FileOutputStream, ByteArrayOutputStream, Socket.getOutputStream()