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

Java FileDescriptor 詳解:標準輸入輸出與自定義文件描述符

     編輯:Java 相關知識

FileDescriptor 簡介

java.io.FileDescriptor 代表作業系統層面的檔案描述符(整數句柄),可對應開啟的檔案、Socket 等。Java 以此為橋樑連接底層 I/O。

三大標準描述符

欄位整數值含義
FileDescriptor.in0標準輸入(鍵盤)
FileDescriptor.out1標準輸出(螢幕)
FileDescriptor.err2標準錯誤輸出(螢幕)

原理:從描述符到輸出流

// 底層實現
FileOutputStream fos = new FileOutputStream(FileDescriptor.out);
fos.write('A'); // 寫入標準輸出
// 等價於
System.out.print('A');

System.out 內部即包裝 FileOutputStream(FileDescriptor.out) 再套 PrintStream。

自定義檔案描述符操作

// 寫入
FileOutputStream out1 = new FileOutputStream("file.txt");
FileDescriptor fd = out1.getFD();          // 取得描述符
FileOutputStream out2 = new FileOutputStream(fd); // 同一檔案的另一流
out1.write('A'); out2.write('a');          // 寫入同一檔案

// 讀取
FileInputStream in1 = new FileInputStream("file.txt");
FileDescriptor fdin = in1.getFD();
FileInputStream in2 = new FileInputStream(fdin);
System.out.println((char) in1.read()); // 'A'
System.out.println((char) in2.read()); // 'a'

關鍵方法

  • getFD():從流取得關聯的 FileDescriptor。
  • valid():判斷描述符是否仍有效(未關閉)。
  • sync():強制將緩衝區資料刷新至磁碟(僅對檔案有效)。

應用場景

  • 需共享同一檔案描述符的多個流(如同時讀寫隨機存取檔案)。
  • JNI 層傳遞檔案描述符給 Native 代碼。
  • 實作自定義 FileOutputStream 子類控制底層行為。

總結

FileDescriptor 是 Java I/O 與作業系統的紐帶。日常開發多使用高層封裝(System.out、Files、Channels),理解其原理有助於排查底層 I/O 問題。

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