news 2026/9/30 6:23:38

java IO操作 你快速认识IO的相关基本知识

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
java IO操作 你快速认识IO的相关基本知识

I/O输入/输出(Input/Output),不同的I/O方式有不同的实现方式和性能,在不同的应用中可以按情况选择不同的I/O方式。输入输出I/O流可以看成对字节或者包装后的字节的读取就是拿出来放进去双路切换。在当下的各种存储产品中,按照速度从快到慢应该就是内存>闪存>磁盘>磁带。Java 中通过 java.io.File 类来对一个文件(包括目录)进行抽象的描述.(io即input和output)。通过File对象来描述一个具体的文件,可以对应到一个真实存在的文件,也可以对应到一个不存在的文件.文件的分类:文件可以分为文本文件和二进制文件。平时我们在记事本中编辑的内容就属于文本文件;平时看到的图片文件如果不借助其他专业的软件是不能对图片进行编辑查看的,用记事本打开后看到一堆乱码,此时它里面存储的就是二进制内容。

Java中的IO模型主要有三种

1、BIO(Blocking IO):

同步阻塞式IO,是比较常用的IO模型,特点是编写相对简单,应用程序发起 read 调用后,会一直阻塞,直到内核把数据拷贝到用户空间。这种模型在客户端链接数量比较少的情况是可以的,如果一旦数量上来达到万级别时,就会出现问题。

2、NIO(Nonblocking IO):

Java 中的 NIO 于 Java 1.4 中引入,对应java.nio包,提供了Channel,Selector,Buffer等抽象。NIO 中的 N 可以理解为 Non-blocking,不单纯是 New。它是支持面向缓冲的,基于通道的 I/O 操作方法。 对于高负载、高并发的(网络)应用,应使用 NIO 。Java 中的 NIO 可以看作是 I/O 多路复用模型。也有很多人认为,Java 中的 NIO 属于同步非阻塞 IO 模型。

3、AIO(Asynchronous IO):

AIO 也就是 NIO 2。Java 7 中引入了 NIO 的改进版 NIO 2,它是异步 IO 模型。异步 IO 是基于事件和回调机制实现的,也就是应用操作之后会直接返回,不会堵塞在那里,当后台处理完成,操作系统会通知相应的线程进行后续的操作。目前来说 AIO 的应用还不是很广泛。Netty 之前也尝试使用过 AIO,不过又放弃了。这是因为,Netty 使用了 AIO 之后,在 Linux 系统上的性能并没有多少提升。

IO模型https://www.processon.com/view/6675082c5cb8e56220a4eb57?utm_source=yingying

java中IO流的分类

按照数据单位:

字节流(Byte Streams)和字符流(Character Streams)

- 字节流(Byte Stream):用于处理二进制数据,适合处理图像、音频和其他非文本数据。例如,FileInputStream和FileOutputStream是字节流的典型代表。

- 字符流(Character Stream):用于处理文本数据,适合处理字符集编码的文本文件。例如,FileReader和FileWriter是字符流的典型代表。

按照传输的方向:

输入流(input Stream)和输出流(output Stream)

- 输入流(Input Stream):用于从外部源读取数据。常见的输入流类包括InputStream和Reader的子类。

- 输出流(Output Stream):用于将数据写入外部目标。常见的输出流类包括OutputStream和Writer的子类。

Java IO结构https://www.processon.com/view/58579498e4b0f767284d1e98?utm_source=yingying

java中文件的具体操作

在整个Java.io包中最重要的有5个类和一个接口。5个类指的是File、OutputStream、InputStream、Writer、Reader;一个接口指的是Serializable. 主要的类如下:

  1. File(文件):File类是对文件系统中文件以及文件夹进行封装的对象,可以通过对象的思想来操作文件和文件夹。 File类保存文件或目录的各种元数据信息,包括文件名、文件长度、最后修改时间、是否可读、获取当前文件的路径名,判断指定文件是否存在、获得当前目录中的文件列表,创建、删除文件和目录等方法。
  2. InputStream(二进制操作):抽象类,基于字节的输入操作,是所有输入流的父类。定义了所有输入流都具有的共同特征。

3、OutputStream(二进制操作):抽象类。基于字节的输出操作。是所有输出流的父类。定义了所有输出流都具有的共同特征。

常用的方法:

1. public void write(byte b[ ]):将参数b中的字节写到输出流。

2. public void write(byte b[ ], int off, int len) :将参数b的从偏移量off开始的len个字节写到输出流。 3. public abstract void write(int b) :先将int转换为byte类型,把低字节写入到输出流中。

4. public void flush( ) : 将数据缓冲区中数据全部输出,并清空缓冲区。

5. public void close( ) : 关闭输出流并释放与流相关的系统资源。

主要的子类:

1. ByteArrayOutputStream:把信息存入内存中的一个缓冲区中

2. FileOutputStream:把信息存入文件中

3. PipedOutputStream:实现了pipe的概念,主要在线程中使用 4. SequenceOutputStream:把多个OutStream合并为一个OutStream

4、Reader(文件操作):抽象类,用于读取字符流。它是所有字符输入流的父类,可以读取字符数组、字符串等。

5、Writer(文件操作):抽象类,用来将字符或字符串写入到输出流中。

6、RandomAccessFile(随机文件操作):既可以读取文件内容,也可以向文件输出数据。同时RandomAccessFile 支持“随机访问”的方式,程序快可以直接跳转到文件的任意地方来读写数据。

字符流Reader的结构https://www.processon.com/view/53f03b9a0cf2dddac7f2c0f0?utm_source=yingying

Java IO流https://www.processon.com/view/6087c0ae63768966e83aee2f?utm_source=yingying

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/30 6:23:19

Java报错PKIX path building failed?一文搞定证书链验证与信任库配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/30 6:23:17

相对总变分RTV:从纹理中提取结构的高效图像平滑算法

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/30 6:19:36

嵌入式开发全链路指南:从环境搭建到固件安全与OTA升级

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/30 6:19:32

PyGame 从零实现 Pong:主循环、帧率控制与碰撞检测

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/30 6:19:14

ISP、ICP、IAP三种芯片烧录方式深入解析:从原理到实战选型

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/30 6:19:01

AI怎么装?云端、本地大模型与编程助手三条部署路线全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华