[转]FileDescriptor详解
FileDescriptor是"文件描述符".
FileDescriptor可以被用来表示开放的文件,开放的套接字等.
当FileDescriptor表示文件来说,当FIleDescriptor表示某文件时,我们可以通俗的将FIleDescriptor看成该文件.但是,我们不能直接通过FIleDescriptor对该文件进行操作;若需要通过FIleDescriptor对该文件进行操作,则需要创建FileDescriptor对应的FileOutputStream,再对文件进行操作.
in,out,err的介绍
- in:标准输入(键盘)的描述符
- out:标准输出(屏幕)的描述符
- err:标准错误输出(屏幕)的描述符
他们三个的原理和用法都类似,下面通过out来进行深入的研究
out的作用和原理
out时标准输出(屏幕)的描述符,但是他有什么作用呢?
我们可以通俗理解,out 就代表了标准输出(屏幕).如我们要输出信息到屏幕,既可以通过out来操作,但是,out 有没有提供输出信息到屏幕的接口,怎么办呢?
很简单,我们创建Out对应的"输出流对象",然后通过"输出流"的write()等接口就可以输出信息到屏幕上去了.
1 public static void main(String[] args) throws IOException 2 { 3 FileOutputStream out = new FileOutputStream(java.io.FileDescriptor.out); 4 out.write("你好啊!".getBytes()); 5 out.close(); 6 }
程序输出:你好啊!
为了方便我们的操作,java早已经为我们封装好了能再屏幕上输出信息的接口:通过System.out
因此上面的代码等同于:System.out.print("你好啊!").
示例代码
1 public class FileDescriptorTest 2 { 3 private static final String FileName = "D:\\baiduyun\\filetest\\ddd.txt"; 4 private static final String OutText = "Hi FileDescriptor"; 5 6 public static void main(String[] args) throws IOException 7 { 8 // testStandFD(); 9 // testWrite(); 10 testRead(); 11 } 12 13 /** 14 * 该程序的效果 等价于 System.out.println(OutText); 15 * 16 * @Method_Name: testStandFD 17 * @Description: * void 18 * @date 2018年11月11日 19 * @author zhangj 20 * @throws IOException 21 */ 22 public static void testStandFD() throws IOException 23 { 24 FileOutputStream out = new FileOutputStream(FileDescriptor.out); 25 PrintStream print = new PrintStream(out); 26 print.write(OutText.getBytes()); 27 } 28 29 /** 30 * FileDescriptor写入示例程序 31 * 32 * @Method_Name: testWrite 33 * @Description: * void 34 * @date 2018年11月11日 35 * @author zhangj 36 * @throws IOException 37 */ 38 private static void testWrite() throws IOException 39 { 40 // 新建file对应FileOutPutStream对象 41 FileOutputStream fout = new FileOutputStream(FileName); 42 // 获得file对应的FileDescripto对象 43 FileDescriptor fd = fout.getFD(); 44 // 根据FileDescriptor创建fileOutPutStream对象 45 FileOutputStream out = new FileOutputStream(fd.out); 46 fout.write("Hello".getBytes()); 47 out.write("World".getBytes()); 48 out.close(); 49 fout.close(); 50 } 51 52 private static void testRead() throws IOException 53 { 54 // 新建文件“file.txt”对应的FileInputStream对象 55 FileInputStream fis = new FileInputStream(FileName); 56 // 获取文件“file.txt”对应的“文件描述符” 57 FileDescriptor fd = fis.getFD(); 58 // 根据“文件描述符”创建“FileInputStream”对象 59 FileInputStream fiss = new FileInputStream(fd); 60 System.out.println("in1.read():" + (char) fis.read()); 61 System.out.println("in2.read():" + (char) fiss.read()); 62 fis.close(); 63 fiss.close(); 64 } 65 }
---------------------
作者:橘右京
来源:CNBLOGS
原文:https://www.cnblogs.com/zhangj-ymm/p/9943597.html
版权声明:本文为作者原创文章,转载请附上博文链接!
内容解析By:CSDN,CNBLOG博客文章一键转载插件
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构