java filedescriptor_Java IO(三)FileDescriptor

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();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值