FileDescriptor詳解


FileDescriptor是"文件描述符".

FileDescriptor可以被用來表示開放的文件,開放的套接字等.

當FileDescriptor表示文件來說,當FIleDescriptor表示某文件時,我們可以通俗的將FIleDescriptor看成該文件.但是,我們不能直接通過FIleDescriptor對該文件進行操作;若需要通過FIleDescriptor對該文件進行操作,則需要創建FileDescriptor對應的FileOutputStream,再對文件進行操作.

in,out,err的介紹

  1.  in:標准輸入(鍵盤)的描述符
  2. out:標准輸出(屏幕)的描述符
  3. err:標准錯誤輸出(屏幕)的描述符

他們三個的原理和用法都類似,下面通過out來進行深入的研究

out的作用和原理

out時標准輸出(屏幕)的描述符,但是他有什么作用呢?

我們可以通俗理解,out 就代表了標准輸出(屏幕).如我們要輸出信息到屏幕,既可以通過out來操作,但是,out 有沒有提供輸出信息到屏幕的接口,怎么辦呢?

很簡單,我們創建Out對應的"輸出流對象",然后通過"輸出流"的write()等接口就可以輸出信息到屏幕上去了.

1 public static void main(String[] args) throws IOException
2     {
3         FileOutputStream out = new FileOutputStream(java.io.FileDescriptor.out);
4         out.write("你好啊!".getBytes());
5         out.close();
6     }

 

程序輸出:你好啊!

為了方便我們的操作,java早已經為我們封裝好了能再屏幕上輸出信息的接口:通過System.out

因此上面的代碼等同於:System.out.print("你好啊!").

示例代碼

 1 public class FileDescriptorTest
 2 {
 3     private static final String FileName = "D:\\baiduyun\\filetest\\ddd.txt";
 4     private static final String OutText = "Hi FileDescriptor";
 5 
 6     public static void main(String[] args) throws IOException
 7     {
 8         // testStandFD();
 9         // testWrite();
10         testRead();
11     }
12 
13     /**
14      * 該程序的效果 等價於 System.out.println(OutText);
15      * 
16      * @Method_Name: testStandFD
17      * @Description: * void
18      * @date 2018年11月11日
19      * @author zhangj
20      * @throws IOException
21      */
22     public static void testStandFD() throws IOException
23     {
24         FileOutputStream out = new FileOutputStream(FileDescriptor.out);
25         PrintStream print = new PrintStream(out);
26         print.write(OutText.getBytes());
27     }
28 
29     /**
30      * FileDescriptor寫入示例程序
31      * 
32      * @Method_Name: testWrite
33      * @Description: * void
34      * @date 2018年11月11日
35      * @author zhangj
36      * @throws IOException
37      */
38     private static void testWrite() throws IOException
39     {
40         // 新建file對應FileOutPutStream對象
41         FileOutputStream fout = new FileOutputStream(FileName);
42         // 獲得file對應的FileDescripto對象
43         FileDescriptor fd = fout.getFD();
44         // 根據FileDescriptor創建fileOutPutStream對象
45         FileOutputStream out = new FileOutputStream(fd.out);
46         fout.write("Hello".getBytes());
47         out.write("World".getBytes());
48         out.close();
49         fout.close();
50     }
51 
52     private static void testRead() throws IOException
53     {
54         // 新建文件“file.txt”對應的FileInputStream對象
55         FileInputStream fis = new FileInputStream(FileName);
56         // 獲取文件“file.txt”對應的“文件描述符”
57         FileDescriptor fd = fis.getFD();
58         // 根據“文件描述符”創建“FileInputStream”對象
59         FileInputStream fiss = new FileInputStream(fd);
60         System.out.println("in1.read():" + (char) fis.read());
61         System.out.println("in2.read():" + (char) fiss.read());
62         fis.close();
63         fiss.close();
64     }
65 }

 


免責聲明!

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



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