一、FileDescriptor

文件描述符类的实例用作与基础机器有关的某种结构的不透明句柄,该结构表示开放文件、开放套接字或者字节的另一个源或接收者。文件描述符的主要实际用途是创建一个包含该结构的 FileInputStreamFileOutputStream

二、静态标准文件描述符

(1)标准文件描述符

字段摘要
static FileDescriptor err
          标准错误流的句柄。
static FileDescriptor in
          标准输入流的句柄。
static FileDescriptor out
          标准输出流的句柄。

标准流的源码

public static final FileDescriptor in = standardStream(0);
public static final FileDescriptor out = standardStream(1);
public static final FileDescriptor err = standardStream(2); private static FileDescriptor standardStream(int fd) {FileDescriptor desc = new FileDescriptor();desc.handle = set(fd);return desc;
}
private static native long set(int d);

(2)out 的作用和原理

out是标准输出(屏幕)的描述符。
通过创建out对应的OutputStream对象os,然后通过os的write()等输出接口就可以将信息输出到屏幕上。

try {PrintWriter pw = new PrintWriter(new FileOutputStream(FileDescriptor.out)); pw.print("你好");pw.flush();pw.close();
} catch (Exception e) {
}

输出结果:你好

这与System.out.print()方法一样

三、文件流的FileDescriptor

(1)获取文件描述符Stream.getFD()

try {// 打开文件,获取文件描述符String fileName = "out.txt";FileOutputStream os = new FileOutputStream(fileName);FileDescriptor  fd = os.getFD();System.out.println("file name: " + fileName);//写数据入文件byte[] data = "你好".getBytes();os.write(data);System.out.println("data: " + data);// 刷新缓冲区,数据可能没有写入到磁盘 os.flush();// 阻塞直到数据缓冲区的数据全部写入磁盘,该方法返回后,数据已经写入到磁盘System.out.println("阻塞直到数据缓冲区的数据全部写入磁盘");fd.sync();// 关闭流
    os.close();
} catch (IOException e) {e.printStackTrace();
}

(2)同一个文件描述符

String fileName="file.txt";
try {  // 新建文件file.txt对应的FileOutputStream对象  FileOutputStream os1 = new FileOutputStream(fileName);  // 获取文件file.txt对应的FileDescriptor  FileDescriptor fd = os1.getFD();  // 根据FileDescriptor创建FileOutputStream对象  FileOutputStream os2 = new FileOutputStream(fd);  os1.write('a');    // 通过os1向file.txt中写入'a'  os2.write('b');    // 通过os1向file.txt中写入'b' if (fd!=null)  System.out.printf("fd(%s) is %s\n",fd, fd.valid()); System.out.println(os1.getFD()==os2.getFD()); //true
    os2.close();  os1.close();  } catch(IOException e) {  e.printStackTrace();
}

file.txt 中内容为ab

(3)不同文件描述符

String fileName="file.txt";
try {  // 新建文件file.txt对应的FileOutputStream对象  FileOutputStream os1 = new FileOutputStream(fileName);           // 根据FileDescriptor创建FileOutputStream对象  FileOutputStream os2 = new FileOutputStream(fileName);  os1.write('a');    // 通过out1向file.txt中写入'a'  os2.write('b');   // 通过out1向file.txt中写入'b'
          System.out.println(os1.getFD()==os2.getFD());    //false
    os2.close();  os1.close();
} catch(IOException e) {  e.printStackTrace();
}    

file.txt 中内容为b

最后,FileInputStream 与FileOutputStream的执行结果类似。

FileDescriptor的作用相关推荐

  1. java io系列09之 FileDescriptor总结

    转载自    java io系列09之 FileDescriptor总结 FileDescriptor 介绍 FileDescriptor 是"文件描述符". FileDescri ...

  2. Android JNI作用及其详解

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

  3. Zygote启动及其作用

    目录 1.Zygote简介 2.Zygote进程如何启动 2.1 init.zygote64_32.rc文件 2.2 查看ps信息 2.3 启动 3.Zygote作用 3.1 启动system_ser ...

  4. FileReader FileInputStream InputStreamReader BufferedReader 作用与区别

    FileReader FileInputStream InputStreamReader BufferedReader 作用与区别 ava.io下面有两个抽象类:InputStream和Reader ...

  5. android绑定文件描述符,认识安卓的文件描述符FileDescriptor

    理解文件描述符 文件描述符(FileDescriptor) 这是Unix/Linux系统文件操作的相关概念,Android也属于Linux操作系统.因此理解Linux下的文件描述符也就明白安卓下文件描 ...

  6. java descriptor_java io系列09之 FileDescriptor总结

    本章对FileDescriptor进行介绍 FileDescriptor 介绍 FileDescriptor 是"文件描述符". FileDescriptor 可以被用来表示开放文 ...

  7. FileDescriptor详解

    FileDescriptor 介绍 FileDescriptor 是"文件描述符". FileDescriptor 可以被用来表示开放文件.开放套接字等. 以FileDescrip ...

  8. java filedescriptor_Java IO(三)FileDescriptor

    Java IO(三)FileDescriptor 一.介绍 FileDescriptor 是文件描述符,用来表示开放文件.开放套接字等.当 FileDescriptor 表示文件时,我们可以通俗的将 ...

  9. Object的finalize()方法的作用是否与C++的析构函数作用相同

    Object的finalize()方法的作用是否与C++的析构函数作用相同 public class Finalization {private static Finalization finaliz ...

最新文章

  1. linux mysql 数据目录迁移后不生效_mysql 本地数据目录迁移
  2. Linux基础三剑客
  3. 编写一个爬虫类库——(一)想法
  4. android监听方法的耗时时间,Android Studio监听时间变化
  5. maven打jar包pom配置
  6. 结合使用嵌入式Tomcat和Maven tomcat插件
  7. linux历史性能数据,Linux平台下如何看OS历史的性能数据
  8. 7-96 福到了 (15 分)
  9. 操作系统 多线程之优先级翻转
  10. MongoDB 的命令操作
  11. Loadrunner11安装
  12. mongodb分组查询 php,MongoVUE下实现MongoDB的Group分组查询
  13. Jeesit下面form:select的二级联动
  14. python 更新pip报错 解决方法大全
  15. matlab实现螺旋谱分解,MATLAB实现EMD分解及希尔伯特谱分析
  16. Microsoft Office XP 智能标记的安装和安全性
  17. app逆向--91视频刷邀请
  18. 单细胞三大R包之Seurat
  19. 鸿洋,郭霖Android开发大牛:从入门到精通系列学习路线以及进阶Android高级工程师书籍介绍
  20. numpy创建伪单位矩阵

热门文章

  1. LeetCode动态规划 使用最小花费爬楼梯
  2. P4590 [TJOI2018]游园会 dp套dp + 状态机
  3. Codeforces Global Round 12 C1 C2. Errich-Tac-Toe 思维构造 好题
  4. 【NOI2011】兔兔与蛋蛋的游戏【二分图博弈】
  5. LuoguP5366 [SNOI2017]遗失的答案
  6. [BZOJ3944] Sum
  7. CF455B A Lot of Games
  8. Acwing 276. I-区域
  9. 牛客题霸 [判断二叉树是否对称] C++题解/答案
  10. 牛客NOIP2021提高组OI赛前模拟赛第一场T3——与巨(数学)