ObjectInputStream&ObjectOutputStream工具类
序列化:将数据保存到文件;ObjectOutputStream;
反序列化:将文件中的数据显示出来;ObjectInputStream;
在反序列化程序中运行后能够正常输出Person的相关信息,但是在目录下的文件“person.obj”用文本编辑器打开之后却是乱码的。这是为什么呢?是不是因为写出去的编码和文本编辑器的默认编码采用了不一样的字符集?然后我们就开始想怎么能够将二者的编码格式设为一致的。
其实,这么想一开始就是错误的。为什么这么说呢,因为序列化和反序列化都是基于二进制流的,也就是说,在第二步中,其实就是将person的相关信息转化为二进制存储在了person.obj这个文件中,那么用文本编辑器打开查看的话当然是会出现乱码的。只有通过反序列化才能将存储的二进制读取出来,然后正常显示在控制台上。
package com.util; import com.bean.*; import java.util.*; import java.io.*; public class StudentUtil { /** * 从文件中获取Student集合对象List * */ public static List<Student> fileToLst() { List<Student> lsst = null; // 获取存放学生集合的文件对象 File file = new File("stu.bin"); try { if (file.exists()) { // 创建文件输入流对象 FileInputStream fin = new FileInputStream(file); // 创建缓冲区输入流对象 BufferedInputStream bin = new BufferedInputStream(fin); // 创建对象输入流 ObjectInputStream oin = new ObjectInputStream(bin); // 从对象输入流中获取学生的集合对象 lsst = (List<Student>) oin.readObject(); oin.close(); return lsst; } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } return lsst; } /** * 向文件中存放学生的集合对象 * */ public static boolean listToFile(ArrayList<Student> lsst) { // 创建文件对象,指定文件存放的路径 File file = new File("stu.bin"); // 集合中有元素存在,向文件中写入数据 if (lsst != null && !lsst.isEmpty()) { try { FileOutputStream fout = new FileOutputStream(file); // 创建缓冲区输出流对象 BufferedOutputStream bout = new BufferedOutputStream(fout); // 创建对象输出流 ObjectOutputStream obout = new ObjectOutputStream(bout); obout.writeObject(lsst); obout.flush(); obout.close(); return true; } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return false; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)