序列化:将数据保存到文件;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;
}
}

最新文章

  1. 匿名内部类与equals之学习要扎实
  2. Linux下的文件及文件后缀名
  3. Understanding CMS GC Logs--转载
  4. iOS开发项目之四 [ 调整自定义tabbar的位置与加号按钮的位置]
  5. delphi常用函数过程
  6. Core Animation2-CABasicAnimation
  7. POJ 3107 Godfather (树形dp)
  8. MySQL触发器 trigger之for each row
  9. js 数组里求最大值和最小值
  10. 6.26学习 异步委托回调函数 VS 多线程 VS 并行处理
  11. 线性表的顺序存储结构的实现及其应用(C/C++实现)
  12. ORACLE安装报错解决
  13. Android 启动APP时黑屏白屏的解决方案
  14. chartControl ViewType.Bar 用法测试
  15. 6.1 Pandora 实操 - 数据收集
  16. node.js调用google翻译api
  17. 图文列表,关于Simpleadapter
  18. CentOS7搭建FastDFS V5.11分布式文件系统-第二篇
  19. java两种同步机制的实现 synchronized和reentrantlock
  20. MS SQL 流程控制语句

热门文章

  1. Flume使用(案例分析)
  2. 20145202马超 《Java程序设计》第五周学习总结
  3. MySQL数据库基础总结
  4. 设计模式之第22章-组合模式(Java实现)
  5. 程序员必备PC维修法(软件篇)
  6. APP测试用例要考虑的一些方面
  7. mongoDB坑
  8. [g2o]C++图优化库
  9. vue components &amp; `@import css` bug
  10. Python中的多线程编程,线程安全与锁(一)