FileDescriptor


FileDescriptor 在java中的java.io包下面  

1 public final class FileDescriptor {
2 。。。
3 }

官方的解釋:

  文件描述符類的實例用作與基礎機器有關的某種結構的不透明句柄,該結構表示開放文件、開放套接字或者字節的另一個源或接收者。文件描述符的主要實際用途是創建一個包含該結構的 FileInputStream 或 FileOutputStream

  一坨~~~看不明白~

  在wiki中的描述

  是一個用於表述指向文件的引用的抽象化概念。在形式上是一個非負整數。實際上,它是一個索引值,指向內核為每一個進程所維護的該進程打開文件的記錄表。當程序打開一個現有文件或者創建一個新文件時,內核向進程返回一個文件描述符。程序設計中,一些涉及底層的程序編寫往往會圍繞着文件描述符展開。但是文件描述符這一概念往往只適用於UNIXLinux這樣的操作系統。

   基於上面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介紹

  1. (01) in  -- 標准輸入(鍵盤)的描述符  
  2. (02) out -- 標准輸出(屏幕)的描述符  
  3. (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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM