Java IO 流:从入门到实践

ops/2025/2/25 6:27:08/

目录

引言

什么是 IO 流?

IO 流的分类

1. 按数据流向

2. 按数据类型

3. 按功能

常用 IO 流类

IO 流的使用

1. 字节流示例:文件复制

2. 字符流示例:文件读写

3. 缓冲流示例:高效文件读写

4. 对象序列化示例

IO 流的最佳实践

总结


引言

在 Java 编程中,IO 流(Input/Output Stream)是处理输入输出操作的核心工具。无论是读写文件、网络通信,还是处理用户输入,IO 流都扮演着重要角色。本文将详细介绍 Java IO 流的基本概念、分类以及常见用法,并通过代码示例帮助你快速掌握 IO 流的使用。


什么是 IO 流?

IO 流是 Java 中用于处理输入输出操作的抽象概念。它可以将数据从一个地方传输到另一个地方,例如从文件读取数据或将数据写入网络。IO 流的核心思想是流式处理,即数据像水流一样从一个地方流向另一个地方。


IO 流的分类

Java 中的 IO 流可以分为以下几类:

1. 按数据流向

  • 输入流(Input Stream):用于从外部读取数据(如文件、网络)。

  • 输出流(Output Stream):用于向外部写入数据。

2. 按数据类型

  • 字节流(Byte Stream):以字节为单位读写数据,适用于所有类型的数据。

    • 输入流:InputStream

    • 输出流:OutputStream

  • 字符流(Character Stream):以字符为单位读写数据,适用于文本数据。

    • 输入流:Reader

    • 输出流:Writer

3. 按功能

  • 节点流(Node Stream):直接操作数据源(如文件、网络)。

  • 处理流(Processing Stream):对节点流进行封装,提供额外的功能(如缓冲、数据转换)。


常用 IO 流类

以下是 Java 中常用的 IO 流类:

分类字节流字符流
输入流InputStreamReader
输出流OutputStreamWriter
文件操作FileInputStreamFileReader
FileOutputStreamFileWriter
缓冲流BufferedInputStreamBufferedReader
BufferedOutputStreamBufferedWriter
数据转换DataInputStreamInputStreamReader
DataOutputStreamOutputStreamWriter
对象序列化ObjectInputStream-
ObjectOutputStream-

IO 流的使用

1. 字节流示例:文件复制

以下代码使用字节流实现文件的复制:

java">import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;public class ByteStreamExample {public static void main(String[] args) {String sourceFile = "source.txt";String targetFile = "target.txt";try (FileInputStream fis = new FileInputStream(sourceFile);FileOutputStream fos = new FileOutputStream(targetFile)) {byte[] buffer = new byte[1024];int bytesRead;// 读取源文件并写入目标文件while ((bytesRead = fis.read(buffer)) != -1) {fos.write(buffer, 0, bytesRead);}System.out.println("文件复制完成!");} catch (IOException e) {e.printStackTrace();}}
}

2. 字符流示例:文件读写

以下代码使用字符流实现文件的读写:

java">import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;public class CharacterStreamExample {public static void main(String[] args) {String sourceFile = "source.txt";String targetFile = "target.txt";try (FileReader fr = new FileReader(sourceFile);FileWriter fw = new FileWriter(targetFile)) {int character;// 读取源文件并写入目标文件while ((character = fr.read()) != -1) {fw.write(character);}System.out.println("文件读写完成!");} catch (IOException e) {e.printStackTrace();}}
}

3. 缓冲流示例:高效文件读写

以下代码使用缓冲流提高文件读写的效率:

java">import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;public class BufferedStreamExample {public static void main(String[] args) {String sourceFile = "source.txt";String targetFile = "target.txt";try (BufferedReader br = new BufferedReader(new FileReader(sourceFile));BufferedWriter bw = new BufferedWriter(new FileWriter(targetFile))) {String line;// 逐行读取源文件并写入目标文件while ((line = br.readLine()) != null) {bw.write(line);bw.newLine(); // 写入换行符}System.out.println("文件读写完成!");} catch (IOException e) {e.printStackTrace();}}
}

4. 对象序列化示例

以下代码演示如何使用对象流实现对象的序列化和反序列化:

java">import java.io.*;class Student implements Serializable {private String name;private int age;public Student(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "Student{name='" + name + "', age=" + age + "}";}
}public class ObjectStreamExample {public static void main(String[] args) {String file = "student.dat";// 序列化对象try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file))) {Student student = new Student("Alice", 20);oos.writeObject(student);System.out.println("对象序列化完成!");} catch (IOException e) {e.printStackTrace();}// 反序列化对象try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file))) {Student student = (Student) ois.readObject();System.out.println("反序列化对象: " + student);} catch (IOException | ClassNotFoundException e) {e.printStackTrace();}}
}

IO 流的最佳实践

  1. 使用 try-with-resources

    • 确保流在使用后自动关闭,避免资源泄漏。

  2. 使用缓冲流

    • 提高读写效率,减少频繁的 IO 操作。

  3. 处理异常

    • 捕获并处理 IOException,确保程序健壮性。

  4. 选择合适的流

    • 根据数据类型和场景选择字节流或字符流。


总结

Java IO 流是处理输入输出操作的重要工具。通过本文的介绍,你应该已经掌握了 IO 流的基本概念、分类以及常见用法。无论是文件操作、网络通信,还是对象序列化,IO 流都能帮助你高效地完成任务。


http://www.ppmy.cn/ops/161137.html

相关文章

STM32 HAL库UART串口数据接收实验

1. 实验目标 掌握STM32 HAL库的UART配置方法 实现通过UART接收数据并处理 使用中断方式接收数据 用串口调试工具发送数据1或0,输入为1时板载LED亮,输入为0板载LED熄灭。 2. 硬件准备 STM32开发板(STM32F103C8T6) USB转TTL模块…

深入理解Zookeeper:分布式系统的协调者

引言 在现代分布式系统中,协调和管理多个节点之间的状态和行为是一个复杂且关键的任务。Zookeeper作为一个分布式协调服务,为开发者提供了一种高效、可靠的方式来处理分布式系统中的一致性问题。本文将介绍Zookeeper的基本概念、使用场景以及如何通过示…

前沿科技一览未来发展趋势

新能源在分布式能源系统中的应用越来越广泛。这不仅提高了能源使用效率,还促进了环境。下面就来谈谈这个话题。 首先,新能源比如太阳能和风能,在分布式能源系统中可以有效减少对传统能源的依赖。例如,家庭安装太阳能板就可以自己…

复刻Dummy机械臂保姆教程

一直想复刻稚晖君的Dummy机械臂,24年11月底终于开始行动,上网学习、材料准备、组装调试前后耗时1个多月,终于在春节前顺利完工,正好用它给大家拜个年。很多同学在咨询细节,这里就整理一份保姆式教程,其中学…

高清下载油管视频到本地

下载工具并安装: yt-dlp官网地址: GitHub - yt-dlp/yt-dlp: A feature-rich command-line audio/video downloader ffmpeg官网地址: Download FFmpeg 注:记住为其添加环境变量 操作命令: 该指令表示以720p码率下载VIDEO_UR…

python小项目编程-中级(1、图像处理)

目录 图像处理 实现 测试 unittest pytest 图像处理 实现界面化操作,使用PIL库实现简单的图像处理功能,如缩放(设置缩放比例)、旋转和滤镜、对比度调整、亮度调整、灰度图、二值化图(二值图如果使用的是彩色图片需…

4 算法1-3 三连击(升级版)

题目描述 将 1,2,…,9 共 9 个数分成三组,分别组成三个三位数,且使这三个三位数的比例是 A:B:C,试求出所有满足条件的三个三位数,若无解,输出 No!!!。 输入格式 三个数,A,B,C。 输出格式 若干行&#…

【目标检测】【BiFPN】EfficientDet:Scalable and Efficient Object Detection

EfficientDet:可扩展且高效的目标检测 0.论文摘要 模型效率在计算机视觉中变得越来越重要。在本文中,我们系统地研究了用于目标检测的神经网络架构设计选择,并提出了几项关键优化以提高效率。首先,我们提出了一种加权双向特征金…