Java IO框架

一、IO的核心概念

数据存储的问题:程序运行时数据默认存储在内存中,内存存储是临时的,程序重启后数据会丢失,无法实现持久化。

持久化:将数据从内存传输到硬盘等外部存储设备的过程,是IO的核心目的。

流(Stream):内存与存储设备之间传输数据的通道/管道,数据借助流完成读写传输,类比水库通过管道向脸盆输水的过程。

二、IO流的分类

IO流可从方向、操作单位、功能三个维度划分:

  1. 按传输方向(以JVM为参照物)

输入流:将存储设备中的数据读取到内存中。

输出流:将内存中的数据写入到存储设备中。

  1. 按操作单位

字节流:以字节为单位传输数据,可操作所有类型的文件,比如文本、图片、音频、视频等。

字符流:以字符为单位传输数据,仅能操作文本类型的文件,像.java、.txt、.html、.c等可通过记事本打开的文件;.class、.mp3、.mp4等非文本文件无法用字符流操作。

  1. 按功能

节点流:具备基本的读写功能,直接与数据源或目标设备交互。

过滤流:在节点流的基础上扩展功能,增强IO操作的能力。

三、过滤流之对象流

  1. 核心类

ObjectOutputStream和ObjectInputStream是典型的过滤流,在节点流基础上扩展了这些功能:

增强了缓冲区功能;

支持读写8种基本数据类型和字符串;

支持读写对象,其中readObject()方法用于从流中读取一个对象,writeObject(Object obj)方法用于向流中写入一个对象。

  1. 对象序列化

定义:将对象放在流上进行传输的过程就是对象序列化。

要求:

参与序列化的对象对应的类,必须实现java.io.Serializable接口;

被transient修饰的属性,不会参与对象序列化;

如果对象的属性是自定义类型的对象,那么该自定义类也必须是可序列化的;

如果对集合进行对象序列化,要保证集合中的所有元素都可序列化。

文件尾部标识:读取对象时如果抛出java.io.EOFException异常,就表示文件已经读取到尾部。

四、常见字符编码方式

ASCII:美国信息交换标准编码,是基础的字符编码方式。

ISO8859-1:针对西欧语言设计的编码。

GB2312:早期的简体中文字符编码,覆盖的汉字范围有限。

GBK:常用的简体中文字符编码,兼容GB2312且扩展了更多汉字。

Big5:主要在台湾地区使用的繁体中文字符编码。

UTF-8:底层基于Unicode编码形式,会根据字符实际的字节数进行动态编码,是目前主流的通用编码方式。

相关推荐
代码方舟几秒前
零信任架构实战:基于天远人企关联构建自动化供应链核心企业关联穿透与利益冲突审查网关
java·人工智能·架构·自动化
m4Rk_7 分钟前
【论文阅读】Agent 记忆机制(113):Agentic Memory Management——从“检索相关信息”走向“管理 Agent 内部记忆”
论文阅读·人工智能·学习·开源·github
liyi_hz200840 分钟前
O2OA(翱途) V10.1 即将发布|功能再升级,安全再加固,协同更高效!
java·javascript·windows·开源软件
骑着蜗牛撵大象32743 分钟前
AI Agent 工程化开发实战(三):用 StateGraph 给智能体搭一条可回放的状态流水线
java·开发语言·jvm·ai·状态管理·langgraph·stategraph
辣知1 小时前
辣知·化智92 《山海经》里的史前密码
学习
鬼手点金1 小时前
KV Cache 未必是一次性的:可编辑、可组合的“笔记”
java·人工智能·笔记·学习·自动化·1024程序员节
摇滚侠1 小时前
《On Java 中文版 基础卷》阅读笔记 初始化和清理 08
java·开发语言·笔记
海鸥-w2 小时前
Redis 配置与排错说明
java·数据库·redis·bootstrap
XiYang-DING2 小时前
P4009.和为K的子数组个数 & P5522.异或和为 k 的子数组个数
java·开发语言
TinyKey2 小时前
malloc_debug_notes
java