当前位置: 首页 > ai >正文

IO流听不懂?如何快速上手

一、什么是 IO 流?

IO(Input/Output)即输入/输出,是 Java 中用于处理设备之间数据传输的机制。常见的设备包括:文件、网络连接、内存缓冲区等。

Java IO 主要通过 java.io 包中的类实现。

二、IO 流的分类

分类描述
按方向输入流(读取)、输出流(写入)
按单位字节流(8位)、字符流(16位 Unicode)
按功能节点流(直接操作数据源)、处理流(增强节点流的功能)

✅ 常用类结构图:

字节流:
InputStream / OutputStream字符流:
Reader / Writer

三、常见 IO 类型及用途

类名用途
FileInputStream / FileOutputStream文件字节流,用于读写二进制文件(如图片)
FileReader / FileWriter文件字符流,用于读写文本文件
BufferedReader / BufferedWriter带缓冲的字符流,提高读写效率
ObjectInputStream / ObjectOutputStream对象流,支持对象序列化与反序列化

四、常用操作及代码示例

✅ 示例1:使用 `FileReader` 读取文本文件内容
 

import java.io.FileReader;
import java.io.IOException;public class FileReaderExample {public static void main(String[] args) {// 使用 try-with-resources 自动关闭资源try (FileReader reader = new FileReader("example.txt")) {int ch;while ((ch = reader.read()) != -1) { // 逐个字符读取System.out.print((char) ch);}} catch (IOException e) {e.printStackTrace();}}
}

🔍 说明:  
FileReader 是字符流,适合读取文本文件。
read() 返回的是字符的 ASCII 码,需强转为 char。
try-with-resources 会自动调用 close(),避免资源泄漏。

✅ 示例2:使用 BufferedWriter 写入文本到文件

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;public class BufferedWriterExample {public static void main(String[] args) {try (BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))) {writer.write("Hello, Java IO!");      // 写入字符串writer.newLine();                    // 换行writer.write("这是第二行");} catch (IOException e) {e.printStackTrace();}}
}

🔍 说明:  
BufferedWriter 提供了缓冲机制,提高了写入效率。
newLine() 方法用于跨平台换行。

✅ 示例3:复制文件(使用字节流)
 

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;public class FileCopyExample {public static void main(String[] args) {try (FileInputStream fis = new FileInputStream("source.jpg");FileOutputStream fos = new FileOutputStream("copy.jpg")) {byte[] buffer = new byte[1024];  // 缓冲区int bytesRead;while ((bytesRead = fis.read(buffer)) != -1) {fos.write(buffer, 0, bytesRead);  // 从缓冲区写入}} catch (IOException e) {e.printStackTrace();}}
}

🔍 说明:  
 使用 byte[]`缓冲区进行高效读写。
适用于任何类型的文件(如图片、视频等二进制文件)。

✅ 示例4:对象序列化与反序列化(对象流)

import java.io.*;class Person implements Serializable {  // 必须实现 Serializable 接口private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "Person{name='" + name + "', age=" + age + "}";}
}public class ObjectStreamExample {public static void main(String[] args) {String filename = "person.ser";// 序列化:将对象写入文件try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filename))) {Person p = new Person("张三", 25);oos.writeObject(p);System.out.println("对象已写入文件");} catch (IOException e) {e.printStackTrace();}// 反序列化:从文件中读取对象try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filename))) {Person p = (Person) ois.readObject();System.out.println("读取的对象:" + p);} catch (IOException | ClassNotFoundException e) {e.printStackTrace();}}
}


 

 🔍 说明:  
Serializable是一个标记接口,表示该类可以被序列化。
ObjectOutputStream 和 ObjectInputStream 支持对象的持久化保存和恢复。

 五、注意事项

1. 一定要关闭流资源:使用 try-with-resources 可以自动关闭。
2. 字符流 vs 字节流:
    文本文件 → 字符流(如 .txt)
    图片、音频、视频等 → 字节流
3. 缓冲流更高效:如 BufferedReader、BufferedWriter、BufferedInputStream等。
4. 异常处理很重要:IO 操作容易出错,必须捕获并处理 IOException。

 六、思维导图

Java IO 流
├── 字节流
│   ├── InputStream
│   └── OutputStream
├── 字符流
│   ├── Reader
│   └── Writer
├── 节点流
│   ├── FileInputStream
│   ├── FileOutputStream
│   ├── FileReader
│   └── FileWriter
└── 处理流├── BufferedInputStream├── BufferedOutputStream├── BufferedReader├── BufferedWriter├── ObjectInputStream└── ObjectOutputStream

http://www.xdnf.cn/news/12114.html

相关文章:

  • 解读《网络安全法》最新修订,把握网络安全新趋势
  • 理解电池的极化:极化内阻与欧姆内阻解析
  • 在NLP文本处理中,将字符映射到阿拉伯数字(构建词汇表vocab)的核心目的和意义
  • 网络原理3—TCP 2
  • 数据驱动的智驾十年 特斯拉、Momenta合流闯进Robotaxi卫冕之战
  • 使用 Docker Compose 安装 PostgreSQL 16
  • css实现文字颜色渐变
  • 直线导轨微型化技术难点在哪里?
  • python项目中,。 __all__ = [‘StorageConfig‘] 这个__all__ 代表什么含义
  • uboot移植之GPIO上电初始状态的调整
  • HarmonyOS-ArkUI 自定义弹窗
  • 企业im,为企业设计的私有化即时通讯工具
  • [蓝桥杯]修改数组
  • 智慧充电:新能源汽车智慧充电桩的发展前景受哪些因素影响?
  • 塑料回收新突破!Nature 重磅:2 小时解聚碳纤维废料
  • 筑牢企业网管域安全防线,守护数字核心——联软网管域安全建设解决方案
  • SEO长尾关键词优化实战解析
  • AMFCNN-RKD:齿轮故障诊断的轻量级多传感器融合模型详解(python代码复现)
  • pbootcms文章加了浏览权限后出现404错误
  • 【芯片仿真中的X值:隐藏的陷阱与应对之道】
  • NoSQL——Redis配置与优化
  • python技巧:pyvisa打开hislip设备;IEEE 488.2
  • centos查看开启关闭防火墙状态
  • 电子行业AI赋能软件开发经典案例——某金融软件公司
  • 平安养老险蚌埠中心支公司开展金融宣教活动
  • C++定长内存块的实现
  • 【Redis】zset 类型
  • 在 CentOS 上将 Ansible 项目推送到 GitHub 的完整指南
  • 佰力博科技与您探讨压电d33测试有哪些注意事项
  • PySpark性能调优手册:大数据处理中的避坑与实践