Java File 及 FileDescriptor

问:简单说说你对 Java 中 File 与 FileDescriptor 的理解与认识?

答:

  • File 是磁盘文件和目录路径名的一种抽象形式,其直接继承自 Object,实现了 Serializable 接口和 Comparable 接口;实现 Serializable 接口意味着 File 对象可以被序列化,而实现 Comparable 接口意味着 File 对象可以比较大小;此外 File 并没有什么特殊之处,就是对文件的一种上层抽象封装实现,方便操作文件。

  • FileDescriptor 是文件描述符,用来表示开放文件、开放套接字等。当 FileDescriptor 表示文件时,我们可以通俗的将 FileDescriptor 看成是该文件,但是不能直接通过 FileDescriptor 对该文件进行操作,若要通过 FileDescriptor 对该文件进行操作,则需要新创建 FileDescriptor 对应的 FileOutputStream,然后再对文件进行操作。

public final class FileDescriptor {
    /**
     * 在形式上是一个非负整数。
     * 实质是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。
     * 当程序打开一个现有文件或者创建一个新文件时内核向进程返回一个文件描述符。
     */
    private int descriptor;

    public /**/ FileDescriptor() {
        descriptor = -1;
    }

    private /**/ FileDescriptor(int descriptor) {
        this.descriptor = descriptor;
    }

    /**
     * (03)err -- 标准错误输出(屏幕)的描述符
     * @see     java.lang.System#in
     */
    public static final FileDescriptor in = dupFd(0);

    /**
     * (01)in -- 标准输入(键盘)的描述符 
     * @see     java.lang.System#out
     */
    public static final FileDescriptor out = dupFd(1);

    /**
     * (02)out -- 标准输出(屏幕)的描述符  
     * @see     java.lang.System#err
     */
    public static final FileDescriptor err = dupFd(2);

    ......
    //工具构造方法
    private static FileDescriptor dupFd(int fd) {
        try {
            return new FileDescriptor(Os.fcntlInt(new FileDescriptor(fd), F_DUPFD_CLOEXEC, 0));
        } catch (ErrnoException e) {
            throw new RuntimeException(e);
        }
    }
    ......
}

所以,针对 System.X 的 API 来说 FileDescriptor 是一种更加底层的操作,其不与文件名相互关联,只与操作系统中对应文件的句柄关联。

本文参考自 File 及 FileDescriptor 必知必会解析

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,785评论 18 399
  • 一、基础知识:1、JVM、JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机...
    杀小贼阅读 2,424评论 0 4
  • 原创 2017-05-19 子卿 米叔的米故事 文:子卿 | 图:Internet | 编辑:W2D 两个人的回忆...
    庆波926138阅读 313评论 0 0
  • 图文稿件 山东荣成雪天鹅 那些触动你心灵处的治愈句子! 强大升级,这一切只为你! 秦宜智为“三走”活动点赞,艺术学...
    阿猫无处安置的脑洞阅读 3,238评论 1 1
  • #幸福是需要修出来的~每天进步1%~幸福实修08班~05~袁群芽# 20170622(4/99) 【幸福三朵玫瑰】...
    乐Ma666阅读 346评论 1 1