java.io.FileDescriptor 代表作業系統層面的檔案描述符(整數句柄),可對應開啟的檔案、Socket 等。Java 以此為橋樑連接底層 I/O。
| 欄位 | 整數值 | 含義 |
|---|---|---|
FileDescriptor.in | 0 | 標準輸入(鍵盤) |
FileDescriptor.out | 1 | 標準輸出(螢幕) |
FileDescriptor.err | 2 | 標準錯誤輸出(螢幕) |
// 底層實現
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():強制將緩衝區資料刷新至磁碟(僅對檔案有效)。FileOutputStream 子類控制底層行為。FileDescriptor 是 Java I/O 與作業系統的紐帶。日常開發多使用高層封裝(System.out、Files、Channels),理解其原理有助於排查底層 I/O 問題。