Java IO(三)FileDescriptor
Java IO(三)FileDescriptor
一、介绍
二、主要静态常量:in、out、err
in:标准输入标识符
out:标准输出标识符
err:标准错误标识符
这三个标识符的原理都相似,下面以 out 为例
三、out 原理和作用
(一)作用
out 是标准输出的描述符。
我们可以通俗理解,out 就代表了标准输出(外部设备)。若我们要输出信息到外部设备,如屏幕上,即可通过 out 来进行操作;但是,out 又没有提供输出信息到屏幕的接口(因为 out 本质是FileDescriptor 对象,而 FileDescriptor 没有输出接口)。
我们可以创建out对应的“输出流对象”,然后通过输出流对象的 write() 等输出接口就可以将信息输出到屏幕上。
try { FileOutputStream fos = new FileOutputStream(FileDescriptor.out); fos.write('a'); fos.close(); }catch(Exception e) { e.printStackTrace(); }
执行上面代码,可以看到屏幕输出了 ‘a’,此功能相当于 System.out.println() 。
(二)、原理
public final class FileDescriptor { private long handle; public static final FileDescriptor out = standardStream(1); private static FileDescriptor standardStream(int fd) { FileDescriptor desc = new FileDescriptor(); desc.handle = set(fd); return desc; } ...... }
从源码中,可以看出
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 void main(String[] args) { FileInputStream in = null; FileOutputStream out = null; FileOutputStream err = null; try { in = new FileInputStream(FileDescriptor.in); int a = in.read();// 标准输入 out = new FileOutputStream(FileDescriptor.out); out.write(a);// 标准输出 err = new FileOutputStream(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(); } }
}