Java IO(三)FileDescriptor
一、介绍
FileDescriptor 是文件描述符,用来表示开放文件、开放套接字等。当 FileDescriptor 表示文件时,我们可以通俗的将 FileDescriptor 看成是该文件,但是不能直接通过 FileDescriptor 对该文件进行操作,若要通过 FileDescriptor 对该文件进行操作,则需要新创建 FileDescriptor 对应的 FileOutputStream 或 FileInputStream,然后再对文件进行操作。
二、主要静态常量:in、out、err
in:标准输入标识符
out:标准输出标识符
err:标准错误标识符
这三个标识符的原理都相似,下面以 out 为例
三、out 原理和作用
(一)作用
out 是标准输出的描述符。
我们可以通俗理解,out 就代表了标准输出(外部设备)。若我们要输出信息到外部设备,如屏幕上,即可通过 out 来进行操作;但是,out 又没有提供输出信息到屏幕的接口(因为 out 本质是FileDescriptor 对象,而 FileDescriptor 没有输出接口)。
我们可以创建out对应的“输出流对象”,然后通过输出流对象的 write() 等输出接口就可以将信息输出到屏幕上。
try{
FileOutputStream fos= newFileOutputStream(FileDescriptor.out);
fos.write('a');
fos.close();
}catch(Exception e) {
e.printStackTrace();
}
执行上面代码,可以看到屏幕输出了 ‘a’,此功能相当于 System.out.println() 。
(二)、原理
public final classFileDescriptor {private longhandle;public static final FileDescriptor out = standardStream(1);private static FileDescriptor standardStream(intfd) {
FileDescriptor desc= newFileDescriptor();
desc.handle=set(fd);returndesc;
}
......
}
从源码中,可以看出
1、out就是一个FileDescriptor对象。它是通过构造函数FileDescriptor(int fd)创建的。
2、standardStream(int fd)的操作:就是给fd对象(int类型)赋值,fd对象是非常重要的一个变量,“fd = 1”就代表了“标准输出”,“fd = 0”就代表了“标准输入”,“fd = 2”就代表了“标准错误输出”。
FileOutputStream out = new FileOutputStream(FileDescriptor.out); 就是利用standardStream(1)方法来创建“FileDescriptor.out对应的FileOutputStream对象”。
通过上面的学习,我们知道,我们可以自定义标准的文件描述符[即,in(标准输入),out(标准输出),err(标准错误)]的流,从而完成输入/输出功能;但是,java已经为我们封装好了相应的接口,即我们可以更方便的System.in, System.out, System.err去使用它们。
四、实例
public static voidmain(String[] args) {
FileInputStream in= null;
FileOutputStream out= null;
FileOutputStream err= null;try{
in= newFileInputStream(FileDescriptor.in);int a = in.read();//标准输入
out = newFileOutputStream(FileDescriptor.out);
out.write(a);//标准输出
err = newFileOutputStream(FileDescriptor.err);
err.write(a);//标准错误输出
}catch(Exception e) {
e.printStackTrace();
}finally{try{if(in != null) {
in.close();
}if(out != null) {
out.close();
}if(err != null) {
err.close();
}
}catch(Exception e) {
e.printStackTrace();
}
}
}