FileDescriptor 在java中的java.io包下面
1 public final class FileDescriptor { 2 。。。 3 }
官方的解釋:
文件描述符類的實例用作與基礎機器有關的某種結構的不透明句柄,該結構表示開放文件、開放套接字或者字節的另一個源或接收者。文件描述符的主要實際用途是創建一個包含該結構的 FileInputStream
或 FileOutputStream
。
一坨~~~看不明白~
在wiki中的描述
是一個用於表述指向文件的引用的抽象化概念。在形式上是一個非負整數。實際上,它是一個索引值,指向內核為每一個進程所維護的該進程打開文件的記錄表。當程序打開一個現有文件或者創建一個新文件時,內核向進程返回一個文件描述符。在程序設計中,一些涉及底層的程序編寫往往會圍繞着文件描述符展開。但是文件描述符這一概念往往只適用於UNIX、Linux這樣的操作系統。
基於上面filedescriptor在java中,是當應用程序打開一個文件或者建立一個socket連接的時候,內核返回給應用程序一個非負的整數(In,out,err,分別為0,1,2),使用這個稱之為filedescriptor的東西來實現對文件或者socket的操作。
【一網友的解釋】【贊】打開文件或者socket之后給你一個fd,然后你可以拿着fd去操作文件或者socket,也可以把這個fd做為參數傳來傳去。你不能把文件或者socket“本身”作為一個參數傳給一個函數吧,傳fd就可以,因為它就是一個類似指針的東西。函數里面就根據這個fd對這同一個文件或者已經建立的socket連接進行操作。
之所以socket和文件都有fd的原因是都可以在上面做打開,關閉,讀,寫等等操作。
在獲取了filedescriptor之后,可以對文件或socket的操作:
in, out, err介紹
- (01) in -- 標准輸入(鍵盤)的描述符
- (02) out -- 標准輸出(屏幕)的描述符
- (03) err -- 標准錯誤輸出(屏幕)的描述符
它們3個的原理和用法都類似,下面我們通過out來進行深入研究。
out 的作用和原理
out是標准輸出(屏幕)的描述符。但是它有什么作用呢?
我們可以通俗理解,out就代表了標准輸出(屏幕)。若我們要輸出信息到屏幕上,即可通過out來進行操作;但是,out又沒有提供輸出信息到屏幕的接口(因為out本質是FileDescriptor對象,而FileDescriptor沒有輸出接口)。怎么辦呢?
很簡單,我們創建out對應的“輸出流對象”,然后通過“輸出流”的write()等輸出接口就可以將信息輸出到屏幕上。如下代碼:
1 try { 2 FileOutputStream out = new FileOutputStream(FileDescriptor.out); 3 out.write("hello".getBytes()); 4 out.close(); 5 } catch (IOException e) { 6 }
執行上面的程序之后會在屏幕上打印出hello。但是為了方便我們操作,java早已經幫我們完成了操作的封裝,通過System.out.println("hello")。
【參考】http://www.fengfly.com/plus/view-214059-1.html
https://ruby-china.org/topics/161
https://zh.wikipedia.org/wiki/%E6%96%87%E4%BB%B6%E6%8F%8F%E8%BF%B0%E7%AC%A6