FileDescriptor是"文件描述符".

FileDescriptor可以被用来表示开放的文件,开放的套接字等.

当FileDescriptor表示文件来说,当FIleDescriptor表示某文件时,我们可以通俗的将FIleDescriptor看成该文件.但是,我们不能直接通过FIleDescriptor对该文件进行操作;若需要通过FIleDescriptor对该文件进行操作,则需要创建FileDescriptor对应的FileOutputStream,再对文件进行操作.

in,out,err的介绍

  1. in:标准输入(键盘)的描述符
  2. out:标准输出(屏幕)的描述符
  3. err:标准错误输出(屏幕)的描述符

他们三个的原理和用法都类似,下面通过out来进行深入的研究

out的作用和原理

out时标准输出(屏幕)的描述符,但是他有什么作用呢?

我们可以通俗理解,out 就代表了标准输出(屏幕).如我们要输出信息到屏幕,既可以通过out来操作,但是,out 有没有提供输出信息到屏幕的接口,怎么办呢?

很简单,我们创建Out对应的"输出流对象",然后通过"输出流"的write()等接口就可以输出信息到屏幕上去了.

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

程序输出:你好啊!

为了方便我们的操作,java早已经为我们封装好了能再屏幕上输出信息的接口:通过System.out

因此上面的代码等同于:System.out.print("你好啊!").

示例代码

 public class FileDescriptorTest
{
private static final String FileName = "D:\\baiduyun\\filetest\\ddd.txt";
private static final String OutText = "Hi FileDescriptor"; public static void main(String[] args) throws IOException
{
// testStandFD();
// testWrite();
testRead();
} /**
* 该程序的效果 等价于 System.out.println(OutText);
*
* @Method_Name: testStandFD
* @Description: * void
* @date 2018年11月11日
* @author zhangj
* @throws IOException
*/
public static void testStandFD() throws IOException
{
FileOutputStream out = new FileOutputStream(FileDescriptor.out);
PrintStream print = new PrintStream(out);
print.write(OutText.getBytes());
} /**
* FileDescriptor写入示例程序
*
* @Method_Name: testWrite
* @Description: * void
* @date 2018年11月11日
* @author zhangj
* @throws IOException
*/
private static void testWrite() throws IOException
{
// 新建file对应FileOutPutStream对象
FileOutputStream fout = new FileOutputStream(FileName);
// 获得file对应的FileDescripto对象
FileDescriptor fd = fout.getFD();
// 根据FileDescriptor创建fileOutPutStream对象
FileOutputStream out = new FileOutputStream(fd.out);
fout.write("Hello".getBytes());
out.write("World".getBytes());
out.close();
fout.close();
} private static void testRead() throws IOException
{
// 新建文件“file.txt”对应的FileInputStream对象
FileInputStream fis = new FileInputStream(FileName);
// 获取文件“file.txt”对应的“文件描述符”
FileDescriptor fd = fis.getFD();
// 根据“文件描述符”创建“FileInputStream”对象
FileInputStream fiss = new FileInputStream(fd);
System.out.println("in1.read():" + (char) fis.read());
System.out.println("in2.read():" + (char) fiss.read());
fis.close();
fiss.close();
}
}

---------------------
作者:橘右京
来源:CNBLOGS
原文:https://www.cnblogs.com/zhangj-ymm/p/9943597.html
版权声明:本文为作者原创文章,转载请附上博文链接!
内容解析By:CSDN,CNBLOG博客文章一键转载插件

[转]FileDescriptor详解的更多相关文章

  1. Android图片缓存之Bitmap详解

    前言: 最近准备研究一下图片缓存框架,基于这个想法觉得还是先了解有关图片缓存的基础知识,今天重点学习一下Bitmap.BitmapFactory这两个类. 图片缓存相关博客地址: Android图片缓 ...

  2. java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET

    java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET 亲,“社区之星”已经一周岁了!      社区福利快来领取免费参加MDCC大会机会哦    Tag功能介绍—我们 ...

  3. JavaI/O体系详解

    Java中IO操作主要是指使用Java进行输入,输出操作,Java中所有的IO操作类都存放在Java.io包中,在使用时需要导入此包. 在整个Java.io包中最重要的就是5个类和一个接口.5个类指的 ...

  4. bitmap--Bitmap详解与Bitmap的内存优化

    一.Bitmap: Bitmap是Android系统中的图像处理的最重要类之一.用它可以获取图像文件信息,进行图像剪切.旋转.缩放等操作,并可以指定格式保存图像文件. 常用方法: public voi ...

  5. linux select函数详解

    linux select函数详解 在Linux中,我们可以使用select函数实现I/O端口的复用,传递给 select函数的参数会告诉内核: •我们所关心的文件描述符 •对每个描述符,我们所关心的状 ...

  6. Java网络编程和NIO详解8:浅析mmap和Direct Buffer

    Java网络编程与NIO详解8:浅析mmap和Direct Buffer 本系列文章首发于我的个人博客:https://h2pl.github.io/ 欢迎阅览我的CSDN专栏:Java网络编程和NI ...

  7. Android JNI作用及其详解

    Android JNI作用及其详解 Java Native Interface (JNI)标准是Java平台的一部分,它允许Java代码和其他语言写的代码进行交互.JNI 是本地编程接口,它使得在 J ...

  8. Java网络编程和NIO详解7:浅谈 Linux 中NIO Selector 的实现原理

    Java网络编程和NIO详解7:浅谈 Linux 中NIO Selector 的实现原理 转自:https://www.jianshu.com/p/2b71ea919d49 本系列文章首发于我的个人博 ...

  9. Android开发之MdiaPlayer详解

    Android开发之MdiaPlayer详解 MediaPlayer类可用于控制音频/视频文件或流的播放,我曾在<Android开发之基于Service的音乐播放器>一文中介绍过它的使用. ...

随机推荐

  1. jsp页面_按回车键触发事件

    一般在列表页面中,都会带有查询按钮,当输入完查询条件后,如果需要通过鼠标点击"查询"按钮才发起查询,那么就感觉不够方便,那么我们就可以修改为按下回车键的时候发起查询. <sc ...

  2. c++中merge的操作

    merge:将两个有序序列合并成一个新的序列,并对新的序列排序 所在库:<algorithm> 注意:排序规则必须和原序列规则相同.存储时下标从0开始. 函数参数:merge(first1 ...

  3. 解决WSL上运行plantUML中文乱码问题

    生成UML图命令: java -jar plantuml.jar -charset UTF-8 my.txt 1. 保证my.txt 使用uft-8编码 2. wsl中安装中文字体: 如: sudo ...

  4. Vue--通过button跳转到其他组件并携带id参数

    一.创建vue文件 ’ <template> <div> goodsCommon<br/> goodsCommon<br/> goodsCommon&l ...

  5. css Position 上下左中右布局

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...

  6. OpenLayers添加和删除控件

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  7. 【如花美眷】初探weex

    我想我更喜欢weex的原因,应该是weex可以直接运行在浏览器中,而不是像react-native需要运行在模拟设备中. 我想这个原因足以让我使用vue而不是RN. 初探就是稍微运行一下,来看步骤 可 ...

  8. PyChram创建虚拟环境

    目录 1. python创建虚拟环境 2. pycharm中添加python虚拟环境 1. python创建虚拟环境 首先要安装virtualenv模块.打开命令行,输入pip install vir ...

  9. day39-Spring 06-Spring的AOP:带有切点的切面

    环绕增强功能是最强的,它相当于前置增强和后置增强. 这就是带有切点的切面 package cn.itcast.spring3.demo4; import org.aopalliance.interce ...

  10. python 通过.pth文件修改搜索路径