FileDescriptor的作用

一、FileDescriptor

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

 

二、静态标准文件描述符

(1)标准文件描述符

字段摘要
static FileDescriptorerr
          标准错误流的句柄。
static FileDescriptorin
          标准输入流的句柄。
static FileDescriptorout
          标准输出流的句柄。

标准流的源码

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的执行结果类似。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331600.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java流与文件——内存映射文件

【0】README 0.1) 本文描述转自 core java volume 2, 旨在理解 java流与文件——内存映射文件 的相关知识; 0.2)内存映射文件的目的是: 提高访问速度, 缓冲区Buffer; 0.3) 本文干…

java 函数式编程 示例_功能Java示例 第8部分–更多纯函数

java 函数式编程 示例这是第8部分,该系列的最后一部分称为“示例功能Java”。 我在本系列的每个部分中开发的示例是某种“提要处理程序”,用于处理文档。 在上一期文章中,我们已经使用Vavr库看到了一些模式匹配,并且还将故障也视…

html加css作品,我的影视作品,如何在博客园发布带有CSS样式的HTML

总结一下,我做过的视频:(顺便试试在博客园如何发HTML网页)发布网页总结:HTML可以正常发送,但最好将你要发布的html文件放在一个带有ID的div中,这样方便后期添加样式时通过ID添加,不会影响到网页中的其他布局…

FileInputStream

java.ioClass FileInputStream java.lang.Object java.io.InputStream java.io.FileInputStream 所有已实现的接口: Closeable public class FileInputStream extends InputStream FileInputStream 从文件系统中的某个文件中获得输入字节。哪些文件可用取决于主机环境。 Fil…

android console命令,我们可以通过两种方式进入Android的console: 1. 直接执行命令emulator -shell; 2....

Don’t use /usr 这样子编译出来的busybox才不会安装到你主机的/usr目录下。一定要选上。4 执行make编译源码. 如果编译过程中产生无法找到头文件的错误, 可指定交叉编译器用到的头文件所在路径. 如 $make -I./home/jo/tool/arm-2008q3/arm-none-linux-gnueabi/lib…

selenium 示例_Selenium测试中所需的功能和示例

selenium 示例所需功能是用于声明一组基本要求(例如浏览器,操作系统,浏览器版本等的组合)的类,以对Web应用程序执行自动跨浏览器测试。 当我们尝试通过Selenium自动化测试来自动化测试脚本时,我们需要考虑…

java流与文件——正则表达式

【0】README 0.1) 本文描述转自 core java volume 2, 旨在理解 java流与文件——正则表达式 的相关知识; 0.2) there are my original source code below, and for them , please visit https://github.com/pacosonTang/core-ja…

pandoc讲html转换为pdf,mac下利用Pandoc、LaTeX 转换markdown成html,pdf

环境所使用的插件有pandoc,tlmgr,fc-listcssbrew install pandoc由于mac ox 系统生成pdf 须要找到对应的编码集 全部还须要去下载LaTeX,进行安装html5使用tlmgr工具安装全部要的包先进行更新,若是提示所须要的字体没有找到安装gitsudo tlmgr update --se…

java程序连接kafka_Java的Kafka:构建安全,可扩展的消息传递应用程序

java程序连接kafka使用Okta的身份管理平台轻松部署您的应用程序 使用Okta的API在几分钟之内即可对任何应用程序中的用户进行身份验证,管理和保护。 今天尝试Okta。 当今的用户希望可以通过其计算机,手机,平板电脑或任何其他设备访问您的应用…

信息系html5论文,基于HTML5的智力游戏设计电子信息工程本科学生毕业论文.doc

基于HTML5的智力游戏设计电子信息工程本科学生毕业论文本科学生毕业论文(设计)题目(中文):基于HTML5的智力游戏设计(英文):Design of Intelligent Game Based on HTML5姓 名 xxx学 号 xxx院 (系) 电子与信息工程学院专业、年级 电子信息工程指导教师 xxx…

优先队列——左式堆

【0】README 0.1) 本文文字描述部分转自 数据结构与算法分析, 旨在理解 优先队列——左式堆 的基础知识; 0.2) 本文核心思路均为原创, 源代码部分借鉴 数据结构与算法分析 ; 0.3) for origin…

Class类中的getEnclosing*、getDeclared*与getDeclaringClass的区别

一、getEnclosing* 当前类在……中闭合Class<?>getEnclosingClass() 返回底层类的立即封闭类。 Constructor<?>getEnclosingConstructor() 如果该 Class 对象表示构造方法中的一个本地或匿名类&#xff0c;则返回 Constructor 对象&#xf…

java联接pg库_Java14:使用Java 14的新记录联接数据库表

java联接pg库您是否知道可以使用Java 14的预览记录功能将数据库表连接到Java Stream中&#xff1f; 阅读这篇简短的文章&#xff0c;并了解如何使用Speedment Stream ORM完成它。 我们将从如何设置您的项目开始。 建立 下载Java 14 。 转到Speedment Initializer并下载您的项目…

html5遍历集合数据,HTMLCollection集合能打印出来值,但是无法获取每一个值。

var imgs $("#pictureQueryTable img").prevObject[0].images;下图是上面这句打印出来的结果&#xff1a;console.log可以打印出来该集合的数据&#xff0c;但是无法获取该集合中的每一个值&#xff0c;打印该集合的length为0&#xff0c;所以也无法遍历该集合进行操…

优先队列——斜堆

【0】README 0.1&#xff09;本文部分内容转自  http://www.cnblogs.com/skywang12345/p/3638493.html&#xff0c; 旨在理解 优先队列——斜堆 的基础知识&#xff1b; 0.2&#xff09; for original source code , please visit https://github.com/pacosonTang/dataStruc…

Class的getResource与ClassLoader的getResource路径/问题

一、Class的getResource(String path)&#xff1a;URL 1、path 不以’/开头时&#xff0c;默认是从此类所在的包下取资源&#xff1b; 2、path 以’/开头时&#xff0c;则是从ClassPath根下获取&#xff1b; System.out.println(Test.class.getResource("")); Syste…

java 轻量级文件数据库_Java:如何创建轻量级数据库微服务

java 轻量级文件数据库基于云的Java数据库应用程序的数量每分钟都在增加。 许多组织部署了数百甚至数千个微服务实例。 但是&#xff0c;相对于运行时环境&#xff0c;大多数应用程序会带来惊人的不必要开销。 反过来&#xff0c;这会使应用程序运行更慢&#xff0c;运行成本更…

html中显示shell脚本的输出,网页从shell脚本中输入并显示结果

首先&#xff0c;不是在BASH脚本中使用$USERNAME。 $USERNAME是一个包含当前用户名的BASH变量。实际上&#xff0c;在BASH中使用UPPERCASE变量通常是一个糟糕的主意。大多数BASH环境变量都是大写字母&#xff0c;可能会导致混淆。让你的变量小写是个好习惯。此外&#xff0c;因…

优先队列——二项队列(binominal queue)

【0】README 0.1&#xff09; 本文文字描述部分转自 数据结构与算法分析&#xff0c; 旨在理解 优先队列——二项队列&#xff08;binominal queue&#xff09; 的基础知识&#xff1b; 0.2&#xff09; 本文核心的剖析思路均为原创&#xff08;insert&#xff0c;merge和del…

Class的getName、getSimpleName与getCanonicalName的区别

一、getName 除了数组外&#xff0c;其他的类都是输出类全名以 String 的形式返回此 Class 对象所表示的实体&#xff08;类、接口、数组类、基本类型或 void&#xff09;名称。 1、此类对象表示的是非数组类型的引用类型&#xff0c; 返回该类的二进制名称&#xff0c;Java…