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

《Java高级编程:从原理到实战 - 进阶知识篇三》

一. I/O流基本概念

1.1 流的概念

  • 流(Stream):数据在输入/输出设备与程序之间的传输通道

  • 特点:单向流动、顺序访问、先进先出

1.2 流的分类

分类标准类型说明
数据流向输入流(InputStream/Reader)从外部读取数据到程序
输出流(OutputStream/Writer)从程序写出数据到外部
数据类型字节流(InputStream/OutputStream)以字节(8bit)为单位传输
字符流(Reader/Writer)以字符(16bit)为单位传输
功能节点流直接与数据源/目的地连接的流
处理流(包装流)对已有流进行包装/增强功能的流

2. 字节流体系

2.1 核心抽象类

  • InputStream:所有字节输入流的父类

  • OutputStream:所有字节输出流的父类

2.2 常用实现类

文件流

说明
FileInputStream从文件读取字节
FileOutputStream向文件写入字节
// 文件复制示例
try (InputStream in = new FileInputStream("source.txt");OutputStream out = new FileOutputStream("target.txt")) {byte[] buffer = new byte[1024];int len;while ((len = in.read(buffer)) != -1) {out.write(buffer, 0, len);}
}

缓冲流

说明
BufferedInputStream带缓冲的字节输入流
BufferedOutputStream带缓冲的字节输出流
// 使用缓冲流提高效率
try (InputStream in = new BufferedInputStream(new FileInputStream("source.txt"));OutputStream out = new BufferedOutputStream(new FileOutputStream("target.txt"))) {// 操作同上
}

对象流

说明
ObjectInputStream读取序列化对象
ObjectOutputStream写入序列化对象
// 对象序列化示例
class Person implements Serializable {String name;int age;
}try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.dat"))) {oos.writeObject(new Person("张三", 25));
}try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.dat"))) {Person p = (Person) ois.readObject();
}

其他字节流

说明
ByteArrayInputStream从字节数组读取
ByteArrayOutputStream写入到字节数组
DataInputStream读取基本数据类型
DataOutputStream写入基本数据类型
PipedInputStream管道输入流
PipedOutputStream管道输出流

三. 字符流体系

3.1 核心抽象类

  • Reader:所有字符输入流的父类

  • Writer:所有字符输出流的父类

3.2 常用实现类

文件流

说明
FileReader从文件读取字符
FileWriter向文件写入字符
// 文本文件复制
try (Reader reader = new FileReader("source.txt");Writer writer = new FileWriter("target.txt")) {char[] buffer = new char[1024];int len;while ((len = reader.read(buffer)) != -1) {writer.write(buffer, 0, len);}
}

 缓冲流

说明
BufferedReader带缓冲的字符输入流
BufferedWriter带缓冲的字符输出流
// 逐行读取文本文件
try (BufferedReader br = new BufferedReader(new FileReader("text.txt"))) {String line;while ((line = br.readLine()) != null) {System.out.println(line);}
}

四. 文件操作辅助类

4.1 File类

File file = new File("test.txt");
System.out.println("是否存在: " + file.exists());
System.out.println("是文件: " + file.isFile());
System.out.println("路径: " + file.getAbsolutePath());

4.2 Path和Files (Java 7+)

Path path = Paths.get("test.txt");
Files.copy(path, Paths.get("copy.txt"));
List<String> lines = Files.readAllLines(path, StandardCharsets.UTF_8);
Files.write(path, "Hello".getBytes(), StandardOpenOption.APPEND);

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

相关文章:

  • 【算法应用】基于鲸鱼优化算法WOA求解VRPTW问题
  • Oracle无法正常OPEN(三)
  • ARConv的复现流程
  • btrace2.0使用方法
  • 基于FastApi实现本地部署DeepSeek-R1-Distill-Qwen与流式输出
  • 文章四《深度学习核心概念与框架入门》
  • 读书记:《认知红利》
  • 云盘系统设计
  • Vue3+Element Plus全套学习笔记-目录大纲
  • UE自动索敌插件Target System Component
  • MAAS Anvil - 高可用 MAAS 部署管理工具
  • 纳米AI搜索体验:MCP工具的实际应用测试,撰写报告 / 爬虫小红书效果惊艳
  • Matplotlib核心课程-2
  • JavaWeb学习打卡-Day7-正向代理、反向代理、Nginx
  • 使用AI-01开发板和开源后端服务搭建整套小智服务系统
  • 在运行 Hadoop 作业时,遇到“No such file or directory”,如何在windows里打包在虚拟机里运行
  • 赎金信(简单)
  • 单一职责原则(SRP)
  • 安妮推广导航系统开心版多款主题网址推广赚钱软件推广变现一键统计免授权源码Annie
  • 写了个脚本将pdf转markdown
  • C/C++工程师使用 DeepSeek
  • [面试]SoC验证工程师面试常见问题(三)
  • 2505C++,wmi客户端示例
  • MySQL:联合查询
  • Linux-07-Shell
  • 大模型在终末期肾脏病风险预测与临床方案制定中的应用研究
  • 如何封装一个线程安全、可复用的 HBase 查询模板
  • Encoder-free无编码器多模态大模型EVEv2模型架构、训练方法浅尝
  • Windows 使用set和setx设置环境变量(skywalk3)
  • 2.LED灯的控制和按键检测