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

Java IO 系統演進與裝飾器模式實戰

     編輯:Java 相關知識

IO 系統兩大版本

  • Java 1.0(字節流):InputStream/OutputStream 體系,最小單元 8 位字節,無緩衝,直接操作磁盤。
  • Java 1.1(字符流):Reader/Writer 體系,最小單元 16 位字符,支持 Unicode,引入緩衝機制,效率更高。

字符流因使用內存緩衝區,讀寫速度遠快於直接操作硬盤的字節流。但文件存儲仍以字節為主,因此字節流在開發中更常用。

Java 1.0和1.1基本類對比 Java 1.0和1.1裝飾器對比

核心類別詳解

輸入流(InputStream 体系)

  • ByteArrayInputStream:字節數組輸入
  • FileInputStream:文件輸入,支持文件名、File、FileDescriptor
  • PipedInputStream:管道輸入,線程間通信
  • FilterInputStream:裝飾器基類,派生 DataInputStream(基本類型讀取)和 BufferedInputStream(緩衝)

輸出流(OutputStream 体系)

  • ByteArrayOutputStream:字節數組輸出,自動擴容
  • FileOutputStream:文件輸出,注意平台文件鎖限制
  • PipedOutputStream:管道輸出,配合輸入流實現線程通信
  • FilterOutputStream:裝飾器基類,派生 DataOutputStream 和 BufferedOutputStream

裝飾器模式在 IO 中的應用

IO 涉及文件、字符串、字節、緩衝等多種功能組合。若用繼承會導致類爆炸。裝飾器模式動態組合功能:

InputStream input = new BufferedInputStream(new FileInputStream("test.txt"));

將 FileInputStream 包裝為 BufferedInputStream,賦予緩衝能力,靈活高效。

實戰範例:緩衝複製文件

public void copybyte(String srcFile, String destFile) throws IOException {
    InputStream ins = new FileInputStream(srcFile);
    OutputStream outs = new FileOutputStream(destFile);
    byte[] buf = new byte[16384]; // 16KB 緩衝區
    int len;
    while ((len = ins.read(buf)) != -1) {
        outs.write(buf, 0, len);
    }
    ins.close();
    outs.close();
}

測試顯示 16KB 緩衝區性能最優,進一步增大無提升,受限於硬盤 I/O 瓶頸。BufferedInputStream 默認緩衝區 8KB,說明仍有優化空間。

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