FileDescriptor 简介

FileDescriptor,顾名思义:文件描述符。

“文件描述符”这一概念来源于Unix/Linux。在Unix/Linux的设计理念里:一切皆文件。

一个 Unix/Linux 进程可以打开成百上千个文件,为了表示和区分已经打开的文件,Unix/Linux 会给每个文件分配一个编号,这个编号是一个整数,被称为文件描述符(File Descriptor)。

最常见是的文件描述符是0、1、2,分布表示标准输入、标准输出、标准错误。如下所示:

stdin:标准输入,默认设备是键盘,文件编号为0

stdout:标准输出,默认设备是显示器,文件编号为1

stderr:标准错误,默认设备是显示器,文件编号为2

FileDescriptor 使用

我们可以简单地将 FileDescriptor 看成某文件,但是我们不能直接通过 FileDescriptor 对该文件进行操作。如果需要通过 FileDescriptor 对该文件进行操作,则需要创建 FileDescriptor 对应的 FileOutputStream ,然后再对文件进行操作,如下代码所示:

public static void main(String[] args) throws IOException
{
    FileOutputStream out = new FileOutputStream(java.io.FileDescriptor.out);
    out.write("hello world".getBytes());
    out.close();
}

FileDescriptor 源码分析

FileDescriptor 本质上就是一个非负整数,因为它的类属性只有一个:int descriptor。如下所示:

public final class FileDescriptor {
    
    private int descriptor;

    public FileDescriptor() {
        descriptor = -1;
    }

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

    
    public static final FileDescriptor in = dupFd(0);

    
    public static final FileDescriptor out = dupFd(1);

    
    public static final FileDescriptor err = dupFd(2);

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

FileDescriptor 的学习建议

针对FileDescriptor的学习,欢迎关注红黑鸟技术联盟,参与分布式消息中间件的学习,利用FileDescriptor实现消息模块的存储和压缩。

标签: none

添加新评论