(每日持续更新)jdk api之FileDescriptor基础、应用、实战

博主18年的互联网软件开发经验,从一名程序员小白逐步成为了一名架构师,我想通过平台将经验分享给大家,因此博主每天会在各个大牛网站点赞量超高的博客等寻找该技术栈的资料结合自己的经验,晚上进行用心精简、整理、总结、定稿,每天都会整理到12点,为了就是能让大家能够真正了解该技术栈的真正原理,最终从程序员成为一名真正的架构师,写的不一定是全站做好的,但是是全站最用心的~。

以后我会推出一些列的文章,每天都会更新,每天进步一点点,发布顺序【java的api基础、应用、实战】->【java开源技术栈及源码分析】->【java开源技术栈整合】->【java低代码开发平台的建设】

一、java.io

1.18 FileDescriptor

FileDescriptor 类是一个抽象类,代表了与平台无关的文件描述符。它主要用于在Java程序中表示底层文件或其他I/O资源的句柄。以下是关于 FileDescriptor 类的主要信息:

FileDescriptor 类介绍:
  • 包路径: java.io

FileDescriptor 类所有字段:

FileDescriptor 类没有公共字段。

FileDescriptor 类构造方法:
  • FileDescriptor()

    • 无参构造方法,用于创建一个新的 FileDescriptor 实例。

FileDescriptor 类方法摘要:

以下是 FileDescriptor 类中一些主要的方法:

  1. 获取标准文件描述符:

    • static FileDescriptor in 标准输入流的文件描述符。

    • static FileDescriptor out 标准输出流的文件描述符。

    • static FileDescriptor err 标准错误流的文件描述符。

  2. 文件描述符的有效性检查:

    • boolean valid() 检查文件描述符是否有效。

    • void sync() 将文件描述符的数据同步到存储设备中。

  3. 文件描述符的创建:

    • static FileDescriptor from(int fd) 根据给定的整数文件描述符创建一个新的 FileDescriptor 实例。

简单使用例子:

以下是一个简单的例子,演示了如何使用 FileDescriptor 打开和关闭系统的标准输出流:

javaCopy code
import java.io.FileDescriptor;
import java.io.FileOutputStream;
import java.io.IOException;
​
public class FileDescriptorExample {
​public static void main(String[] args) {try {// 使用 FileDescriptor 获取标准输出流的文件描述符FileDescriptor outDescriptor = FileDescriptor.out;
​// 使用文件描述符创建文件输出流FileOutputStream fileOutputStream = new FileOutputStream(outDescriptor);
​// 写入数据到标准输出流fileOutputStream.write("Hello, FileDescriptor!".getBytes());
​// 刷新并关闭输出流fileOutputStream.flush();fileOutputStream.close();} catch (IOException e) {e.printStackTrace();}}
}

在这个例子中,我们使用 FileDescriptor.out 获取标准输出流的文件描述符,然后使用这个文件描述符创建了一个 FileOutputStream 对象。接着,我们向输出流写入数据,并最后刷新和关闭输出流。请注意,这个例子主要是为了演示 FileDescriptor 的使用,并不是一种通常的文件操作方式,因为通常我们直接使用高级的I/O类,而不直接使用文件描述符。

应用场景

FileDescriptor 类主要用于底层 I/O 操作,而且在通常情况下,直接使用高级的 I/O 类(如 FileInputStreamFileOutputStream)更为常见。然而,有一些场景下可能会用到 FileDescriptor,主要涉及以下几个方面的应用场景:

  1. 底层文件描述符操作:

    • 当需要进行底层文件描述符的操作时,可以使用 FileDescriptor。例如,通过 FileDescriptor 对象可以获取标准输入、标准输出、标准错误流的文件描述符,以及创建一个具有指定文件描述符的 FileInputStreamFileOutputStream

  2. 文件描述符的传递:

    • 在一些特殊的场景下,可能需要在不同的进程之间传递文件描述符。这在涉及到进程间通信的情况下可能会用到,例如在 UNIX 系统中的进程间通信机制。

  3. 文件描述符的同步:

    • 使用 sync() 方法可以将文件描述符的数据同步到存储设备中。这在确保数据写入磁盘的场景下可能会用到,虽然在一般情况下,应用程序不需要显式调用 sync(),因为高级的 I/O 操作通常会自动处理同步。

  4. 底层文件系统操作:

    • 一些底层的文件系统操作,特别是在需要直接控制文件描述符的情况下,可能会用到 FileDescriptor。例如,可以使用 FileDescriptor 打开、关闭、操作文件。

  5. JNI(Java Native Interface)调用:

    • 在使用 JNI 调用本地方法的情况下,可能需要将文件描述符传递给本地方法。FileDescriptor 类可以用于在 Java 代码和本地代码之间传递文件描述符。

虽然 FileDescriptor 可以在一些底层的场景中使用,但在一般的应用程序中,通常不需要直接使用它,而是使用更高级的 I/O 类。直接使用高级的 I/O 类会更简便、安全,并且更符合 Java 编程的最佳实践。

实战例子

实战例子中,我们将使用 FileDescriptor 打开一个文件,然后使用底层文件描述符进行读写操作。请注意,这是一个较为底层的操作,一般情况下更推荐使用高级的 I/O 类。

javaCopy code
import java.io.File;
import java.io.FileDescriptor;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
​
public class FileDescriptorExample {
​public static void main(String[] args) {// 指定文件路径String filePath = "example.txt";
​// 写入数据到文件writeFile(filePath, "Hello, FileDescriptor!");
​// 读取文件内容String content = readFile(filePath);System.out.println("File content: " + content);}
​private static void writeFile(String filePath, String data) {try (FileOutputStream fileOutputStream = new FileOutputStream(filePath)) {// 获取文件描述符FileDescriptor fileDescriptor = fileOutputStream.getFD();
​// 写入数据到文件fileOutputStream.write(data.getBytes());
​// 刷新并关闭输出流fileOutputStream.flush();fileOutputStream.close();
​// 同步文件描述符到磁盘fileDescriptor.sync();} catch (IOException e) {e.printStackTrace();}}
​private static String readFile(String filePath) {StringBuilder content = new StringBuilder();
​try (FileInputStream fileInputStream = new FileInputStream(filePath)) {// 获取文件描述符FileDescriptor fileDescriptor = fileInputStream.getFD();
​// 读取文件内容int byteData;while ((byteData = fileInputStream.read()) != -1) {content.append((char) byteData);}
​// 同步文件描述符到磁盘fileDescriptor.sync();} catch (IOException e) {e.printStackTrace();}
​return content.toString();}
}

在这个例子中,我们通过 FileOutputStreamFileInputStream 获取文件描述符,然后分别使用文件描述符进行写和读操作。在写操作中,我们在写入数据后调用 sync() 方法将数据同步到磁盘。在读操作中,同样在读取数据后调用 sync() 方法将数据同步到磁盘。这是一个演示 FileDescriptor 使用的简单例子,但在实际开发中,我们更倾向于使用高级的 I/O 类,以及 try-with-resources 语句来自动关闭资源。

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

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

相关文章

嵌套的CMake

hehedalinux:~/Linux/multi-v1$ tree . ├── calc │ ├── add.cpp │ ├── CMakeLists.txt │ ├── div.cpp │ ├── mult.cpp │ └── sub.cpp ├── CMakeLists.txt ├── include │ ├── calc.h │ └── sort.h ├── sort │ ├── …

Mnajora 使用deb包安装软件

说明 Mnajora 安装deb软件包主要有两种方式 可以使用dpkg 直接安装也可是使用debtap将deb软件包转换成 使用dpkg sudo pacman -S dpkg #安装dpkgsudo dpkg -i ###.deb #使用dpkg安装deb软件包和在ubuntu上是一样的 安装成功 使用debtap debtap是一个用于将.deb包转换为A…

im6ull学习总结(三-3)freetype

1、Freetype简介 FreeType是一个开源的字体渲染引擎,主要用于将字体文件转换为位图或矢量图形,并在屏幕上渲染出高质量的字体。它提供了一组API,使开发者能够在自己的应用程序中使用和呈现字体。 FreeType最初是作为一个独立项目开发的&…

07-Tomcat运行Jenkins并实现链路追踪

4.3.1:部署skywalking java agent ~# apt install openjdk-11-jdk -y ~# cd /apps/ ~# wget https://archive.apache.org/dist/skywalking/java-agent/9.0.0/apache-skywalking-java-agent-9.0.0.tgz ~# tar xf apache-skywalking-java-agent-9.0.0.tgz ~# vim /ap…

Git的安装

1、下载 官网地址: https://git-scm.com/或https://github.com/git-for-windows/git/releases 百度网盘链接:链接:https://pan.baidu.com/s/13_asGO-XQb5KWWH_V7rq6g?pwd0630 2、安装 ①查看GNU协议,可以直接点击下一步。 ②…

橘子学Spring01之spring的那些工厂和门面使用

一、Spring的工厂体系 我们先来说一下spring的工厂体系(也称之为容器),得益于大佬们对于单一职责模式的坚决贯彻,在十几年以来spring的发展路上,扩展出来大量的工厂类,每一个工厂类都承担着自己的功能(其实就是有对应的方法实现)…

Linux 期末复习

Linux 期末复习 计算机历史 硬件基础 1,计算机硬件的五大部件:控制器、运算器、存储器、输入输出设备 2,cpu分为精简指令集(RISC)和复杂指令集(CISC) 3,硬件只认识0和1,最小单位是bit,最小存储单位是字…

【论文阅读】Non-blocking Lazy Schema Changes in Multi-Version

Non-blocking Lazy Schema Changes in Multi-Version Database Management Systems 1. Intro 1.1 Motivation 一个是online能够提供不停机的更新的能力,在很多业务系统里面是必要的。第二个是满足高可用,SaaS、PaaS要提供高可用的系统给用户&#xff…

【Linux实用篇】Linux常用命令(1)

目录 1.1 Linux命令初体验 1.1.1 常用命令演示 1.1.2 Linux命令使用技巧 1.1.3 Linux命令格式 1.2 文件目录操作命令 1.2.1 ls 1.2.2 cd 1.2.3 cat 1.2.4 more 1.2.5 tail 1.2.6 mkdir 1.2.7 rmdir 1.2.8 rm 1.1 Linux命令初体验 1.1.1 常用命令演示 在这一部分中…

openssl3.2 - 官方demo学习 - cms - cms_ver.c

文章目录 openssl3.2 - 官方demo学习 - cms - cms_ver.c概述运行结果笔记END openssl3.2 - 官方demo学习 - cms - cms_ver.c 概述 CMS验签, 将单独签名和联合签名出来的签名文件都试试. 验签成功后, 将签名数据明文写入了文件供查看. 也就是说, 只有验签成功后, 才能看到签名…

如何在你的网站接入QQ登录?

文章目录 准备阶段申请QQ登录的权限创建应用最后上传qqlogin.php代码 准备阶段 国内服务器和备案域名需要你有张独一无二本人的身份证你正面手持身份证的图片一张100px*100px的网站图标 申请QQ登录的权限 首先访问qq互联,点击我直接访问 登陆完成后我们点击面的…

常用计算电磁学算法特性与电磁软件分析

常用计算电磁学算法特性与电磁软件分析 参考网站: 计算电磁学三大数值算法FDTD、FEM、MOM ADS、HFSS、CST 优缺点和应用范围详细教程 ## 基于时域有限差分法的FDTD的计算电磁学算法(含Matlab代码)-框架介绍 参考书籍:The finite…

代码随想录算法训练营第四天 | 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交、142.环形链表II

代码随想录算法训练营第四天 | 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交、142.环形链表II 文章目录 代码随想录算法训练营第四天 | 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交、142.环形链表II1 Le…

软件测试|教你使用Python绘制正多边形

简介 绘制正多边形是Python图形编程的基本任务之一。在本文中,我将为你提供一个使用Python绘制正多边形的详细教程,并提供一个示例代码。我们将使用Python的Turtle库来进行绘制。 步骤1:导入Turtle库 我们需要先安装好Python环境&#xff…

【信息安全】深度分析邮件安全及钓鱼攻击防范

本博文共计3100余字,预计需阅读20分钟 【邮件安全建设】 一、前言 邮件系统作为企业办公网络架构中重要的组成部分,同时也是业务高频使用的办公应用,一旦出现安全问题,业务将会被严重干扰甚至中断,本篇博客通过攻守两…

软件测试|Python数据可视化神器——pyecharts教程(十)

使用pyecharts绘制漏斗图 简介 漏斗图(Funnel Chart)是一种用于可视化数据流程或转化率的图表类型。它通常由一系列阶段组成,每个阶段都有一个名称和一个值,表示在该阶段的转化量或数据流程的进展情况。漏斗图的名称来源于其外观…

浅析五种 React 组件设计模式

作为一名 React 开发者,你可能会面临下面几个问题: 如何构建一个高复用度性的组件,使其适应不同的业务场景?如何构建一个具有简单 API的组件,使其易于使用?如何构建一个在 UI 和功能方面具有可扩展性的组件…

[C#]使用winform部署PP-MattingV2人像分割onnx模型

【官方框架地址】 https://github.com/PaddlePaddle/PaddleSeg 【算法介绍】 PP-MattingV2是一种先进的图像和视频抠图算法,由百度公司基于PaddlePaddle深度学习框架开发。它旨在提供更精准和高效的图像分割功能,特别是在处理图像中的细微部分&#xf…

set -e的作用

今天看人家代码看到一个很有意思的命令 后面我搜索了一下,感觉还是很好用的 set -e 是一个调试用的好东西 比如test.sh echo "执行第一个命令" cd /aaa/bbb echo "执行第二个命令"结果如下 可以看到第二个命令是执行了,虽然我的第…

利用C语言实现输出杨辉三角的前10行

杨辉三角的特点 第一列都为1&#xff0c;对角线为1 第x行第x列为1 第几行就有几个元素 从第三行开始,第二列的元素等于第二行的第一列元素第二列元素之和(排除从第三行开始的首和尾元素) //用C语言实现打印出10行杨辉三角 #include<stdio.h>int main(){int a[10][10];//…