Java IO流汇总

devtools/2025/3/29 3:22:05/

Java IO(输入/输出)流用于处理数据的输入与输出。在Java中,IO流主要分为字节流字符流,它们又可进一步细分为输入流输出流


1. IO流的分类

Java IO流的主要类别如下:

1.1 按数据单位分类

  • 字节流(Stream):处理二进制数据,适用于图片、视频、音频等。
  • 字符流(Reader/Writer):处理文本数据,适用于读取和写入字符串。

1.2 按数据流向分类

  • 输入流(InputStream/Reader):从外部数据源读取数据。
  • 输出流(OutputStream/Writer):向目标写入数据。

1.3 按功能分类

  • 节点流:直接连接数据源,如 FileInputStreamFileReader
  • 处理流:对数据进行加工处理,如 BufferedInputStreamBufferedReader

2. 字节流

2.1 字节输入流

用于读取二进制数据,常见子类包括:

  • FileInputStream:从文件读取数据。
  • BufferedInputStream:提供缓冲,提高读取效率。

示例:使用 BufferedInputStream 读取文件

import java.io.*;public class BufferedByteInputExample {public static void main(String[] args) {try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream("test.txt"))) {int data;while ((data = bis.read()) != -1) {System.out.print((char) data);}} catch (IOException e) {e.printStackTrace();}}
}

2.2 字节输出流

用于写入二进制数据,常见子类包括:

  • FileOutputStream:向文件写入数据。
  • BufferedOutputStream:提供缓冲,提高写入效率。

示例:使用 BufferedOutputStream 写入文件

import java.io.*;public class BufferedByteOutputExample {public static void main(String[] args) {try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("test.txt"))) {String content = "Hello, Buffered Output Stream!";bos.write(content.getBytes());} catch (IOException e) {e.printStackTrace();}}
}

3. 字符流

3.1 字符输入流

用于读取文本数据,常见子类包括:

  • FileReader:从文件读取字符数据。
  • BufferedReader:提供缓冲,提高读取效率。

示例:使用 BufferedReader 读取文件

import java.io.*;public class CharInputExample {public static void main(String[] args) {try (BufferedReader br = new BufferedReader(new FileReader("test.txt"))) {String line;while ((line = br.readLine()) != null) {System.out.println(line);}} catch (IOException e) {e.printStackTrace();}}
}

3.2 字符输出流

用于写入文本数据,常见子类包括:

  • FileWriter:向文件写入字符数据。
  • BufferedWriter:提供缓冲,提高写入效率。

示例:使用 BufferedWriter 写入文件

import java.io.*;public class CharOutputExample {public static void main(String[] args) {try (BufferedWriter bw = new BufferedWriter(new FileWriter("test.txt"))) {bw.write("Hello, Java IO with BufferedWriter!");} catch (IOException e) {e.printStackTrace();}}
}

4. 转换流

用于字节流和字符流之间的转换:

  • InputStreamReader:将字节输入流转换为字符输入流。
  • OutputStreamWriter:将字符输出流转换为字节输出流。

示例:使用 InputStreamReader 读取字节流并转换为字符流

import java.io.*;public class ConvertStreamExample {public static void main(String[] args) {try (InputStreamReader isr = new InputStreamReader(new FileInputStream("test.txt"), "UTF-8")) {int data;while ((data = isr.read()) != -1) {System.out.print((char) data);}} catch (IOException e) {e.printStackTrace();}}
}

5. 对象流(序列化与反序列化)

用于对象的存储和读取:

  • ObjectOutputStream:对象序列化。
  • ObjectInputStream:对象反序列化。

示例:对象序列化和反序列化

import java.io.*;class Person implements Serializable {private static final long serialVersionUID = 1L;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 SerializationExample {public static void main(String[] args) {Person person = new Person("Alice", 25);String filename = "person.ser";try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filename))) {oos.writeObject(person);} catch (IOException e) {e.printStackTrace();}try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filename))) {Person deserializedPerson = (Person) ois.readObject();System.out.println("反序列化对象: " + deserializedPerson);} catch (IOException | ClassNotFoundException e) {e.printStackTrace();}}
}


6. 打印流

用于格式化输出:

  • PrintStream:打印字节数据。
  • PrintWriter:打印字符数据。

示例:使用 PrintWriter 进行格式化输出

import java.io.*;public class PrintStreamExample {public static void main(String[] args) {try (PrintWriter pw = new PrintWriter(new FileWriter("print.txt"))) {pw.println("Hello, PrintWriter!");pw.printf("Number: %d", 100);} catch (IOException e) {e.printStackTrace();}}
}

7. 压缩流

用于数据压缩和解压缩:

  • GZIPOutputStream:用于 GZIP 格式的压缩。
  • GZIPInputStream:用于 GZIP 格式的解压缩。

示例:使用 GZIPOutputStream 进行数据压缩

import java.io.*;
import java.util.zip.*;public class GzipExample {public static void main(String[] args) {try (GZIPOutputStream gos = new GZIPOutputStream(new FileOutputStream("compressed.gz"))) {gos.write("Hello, GZIP Compression!".getBytes());} catch (IOException e) {e.printStackTrace();}}
}


http://www.ppmy.cn/devtools/169132.html

相关文章

KNN算法

一、KNN算法介绍 KNN 算法,也称 k邻近算法,是 有监督学习 中的 分类算法 。它可以用于分类或回归问题,但它通常用作分类算法。 二、KNN算法流程 1.计算已知类别数据集中的点与当前点的距离 2.按照距离增次序排序 3.选取与当前点距离最小…

MyBatis注解方式:从CRUD到数据映射的全面解析

目录 1. MyBatis是什么?2.准备工作2.1创建工程2.2 数据准备2.3 持久层代码2.4 单元测试 3.Mybatis的增删改查操作(使用注解方式)3.1 增(insert)3.2 删(delete)3.3 改(update&#xf…

Pycharm接入DeepSeek,提升自动化脚本的写作效率

一.效果展示: 二.实施步骤: 1.DeepSeek官网创建API key: 创建成功后,会生成一个API key: 2. PyCharm工具,打开文件->设置->插件,搜索“Continue”,点击安装 3.安装完成后&…

Excel(函数进阶篇):FILTER函数全解读、XLOOKUP函数全解读、UNIQUE函数、数组与数组公式

目录 数组与数组函数office365中VLOOKUP函数的加强数组中的多条件判断FILTER函数详解用法概述函数语法 基础筛选多条件筛选进阶技巧结合动态数组 高级函数整合错误处理注意事项FILTER经典问题:一对多查询 XLOOKUP函数XLOOKUP基础用法XLOOKUP函数多条件匹配和双向查询…

Milvus WeightedRanker 对比 RRF 重排机制

省流:优先选择WeightedRanker 以rag为例,优先选择bm25全文检索,其次选择向量检索 Milvus混合搜索中的重排机制 Milvus通过hybrid_search() API启用混合搜索功能,结合复杂的重排策略来优化多个AnnSearchRequest实例的搜索结果。本主题涵盖了重排过程,…

C++之模板二番战

本节我们将要介绍模板的深入知识。 文章目录 前言 一、非类型模板参数 1.1 非类型模板参数的特点 1.2 非类型模板参数的使用场景 1.3 非类型模板参数的使用实例 二、模板特例化 2.1 模板特例化的概念 2.2 函数模板特例化 2.3 函数模板特例化规则 2.4 完全特例化和偏特…

对RIP协议工作原理的分析【复习篇】

路由的分类 **静态路由:**通过网络管理员手工添加的路由条目 **动态路由:**所有路由器都运行相同的路由协议,之后通过路由器之间相互沟通、交流,最终计算出前往未知网段的路由条目 根据范围分类 AS自治系统 类型描述例子IGP&…

鸿蒙保姆级教学

鸿蒙(HarmonyOS)是华为推出的一款面向全场景的分布式操作系统,支持手机、平板、智能穿戴、智能家居、车载设备等多种设备。鸿蒙系统的核心特点是分布式架构、一次开发多端部署和高性能。以下是从入门到大神级别的鸿蒙开发深度分析&#xff0c…