FileDescriptor详解

FileDescriptor是"文件描述符".java

FileDescriptor能够被用来表示开放的文件,开放的套接字等.spa

当FileDescriptor表示文件来讲,当FIleDescriptor表示某文件时,咱们能够通俗的将FIleDescriptor当作该文件.可是,咱们不能直接经过FIleDescriptor对该文件进行操做;若须要经过FIleDescriptor对该文件进行操做,则须要建立FileDescriptor对应的FileOutputStream,再对文件进行操做.code

in,out,err的介绍

  1.  in:标准输入(键盘)的描述符
  2. out:标准输出(屏幕)的描述符
  3. err:标准错误输出(屏幕)的描述符

他们三个的原理和用法都相似,下面经过out来进行深刻的研究对象

out的做用和原理

out时标准输出(屏幕)的描述符,可是他有什么做用呢?blog

咱们能够通俗理解,out 就表明了标准输出(屏幕).如咱们要输出信息到屏幕,既能够经过out来操做,可是,out 有没有提供输出信息到屏幕的接口,怎么办呢?接口

很简单,咱们建立Out对应的"输出流对象",而后经过"输出流"的write()等接口就能够输出信息到屏幕上去了.ip

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     }

 

程序输出:你好啊!get

为了方便咱们的操做,java早已经为咱们封装好了能再屏幕上输出信息的接口:经过System.outit

所以上面的代码等同于:System.out.print("你好啊!").io

示例代码

 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 }
相关文章
相关标签/搜索