• 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 }
  • 相关阅读:
    编写一个函数,接受三个string参数,s,oldVal和newVal。使用迭代器及insert和erase函数将s中所有oldVal替换为newVal。测试你的程序,用他替换通用的简写形式,如,将“tho”,将“”“”
    输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
    oracle中 connect by prior 递归算法
    Java实现3DES加密--及ANSI X9.8 Format标准 PIN PAN获取PIN BlOCK
    XML预览
    Javascript跳转页面和打开新窗口等方法
    Eclipse读取含有extjs的项目文件时卡死或者编写ExtJS时卡
    Oracle-更新字段-一张表的字段更新另一张的表的字段
    Oracle-表被锁住
    03_Ext_Viewport_Window_Dialog
  • 原文地址:https://www.cnblogs.com/zhangj-ymm/p/9943597.html
Copyright © 2020-2023  润新知