Java FileDescriptor 的理解
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实现消息模块的存储和压缩。