概述 
java中的序列化与反序列化都要求对象实现Serializable接口(其实就是声明一下),而对于List这种动态改变的集合默认是不实现这个接口的,也就是不能直接序列化。但是数组是可以序列化的,所以我们只需要将List集合与数组进行转换就可以实现序列化与反序列化了。


序列化

Object对象

public class TestObject implements Serializable{

    private String name;
private String address; public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
} }

实例化对象,加点数据,然后执行序列化

public class Test {

    public static void main(String[] args)
{
//创建要序列化的集合对象
List<TestObject> list = new ArrayList<>();
//加数据
for (int i = 0; i < 5; i++)
{
TestObject testObject = new TestObject();
testObject.setName("MJJ-"+i);
testObject.setAddress("HangZhou");
list.add(testObject);
} File file = new File("object.adt");
try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(file)))
{
//将List转换成数组
TestObject[] obj = new TestObject[list.size()];
list.toArray(obj);
//执行序列化存储
out.writeObject(obj);
}
catch (IOException e)
{
e.printStackTrace();
}
}
}

反序列化

public class Test {

    public static void main(String[] args)
{
File file = new File("object.adt");
try (ObjectInputStream out = new ObjectInputStream(new FileInputStream(file)))
{
//执行反序列化读取
TestObject[] obj = (TestObject[]) out.readObject();
//将数组转换成List
List<TestObject> listObject = Arrays.asList(obj);
}
catch (IOException e)
{
e.printStackTrace();
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
}
}

封装

利用泛型把序列化和反序列化的方法封装起来,方便使用。

工具类

public class StreamUtils {

    /**
* 序列化,List
*/
public static <T> boolean writeObject(List<T> list,File file)
{
T[] array = (T[]) list.toArray();
try(ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(file)))
{
out.writeObject(array);
out.flush();
return true;
}
catch (IOException e)
{
e.printStackTrace();
return false;
}
} /**
* 反序列化,List
*/
public static <E> List<E> readObjectForList(File file)
{
E[] object;
try(ObjectInputStream out = new ObjectInputStream(new FileInputStream(file)))
{
object = (E[]) out.readObject();
return Arrays.asList(object);
}
catch (IOException e)
{
e.printStackTrace();
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
return null;
}
}

使用工具类

//序列化
StreamUtils.<TestObject>writeObject(list, new File("object.adt"));
//反序列化
List<TestObject> re = StreamOfByte.<TestObject>readObjectForList(new File("object.txt"));

最新文章

  1. 移动端UC /QQ 浏览器的部分私有Meta 属性
  2. C#:获取环境信息
  3. linux 压缩命令详解
  4. Linux服务器管理: 系统的定时任务crond
  5. 分享一下自己正在使用的sublime text里的插件
  6. QStyleFactory类参考
  7. 对于POI的XSSFCell 类型问题
  8. IE, FireFox, Opera 浏览器支持CSS实现Alpha透明的方法 兼容问题
  9. VC与ADO数据库操作
  10. 最全linux命令
  11. Spring Boot 2.x以后static下面的静态资源被拦截
  12. mysql查询表是否存在
  13. Java实现对文本文件MD5加密并ftp传送到远程主机目录
  14. MyBatis ResultMap Assocation 返回属性为null的问题
  15. Unity---判断某个点是否在摄像机的视景范围内
  16. [Synthetic-data-with-text-and-image]
  17. A1050. String Subtraction
  18. Hibernate中NoSession问题
  19. java基础78 Servlet的生命周期
  20. node错误集合

热门文章

  1. mysql数据定期备份删除
  2. linux 大中括号变量解读
  3. 洛谷P1160 队列安排
  4. [洛谷1972][SDOI2009]HH的项链
  5. python delete数据
  6. AJAX中的同步加载与异步加载
  7. hdu 1142(迪杰斯特拉+记忆化搜索)
  8. AC日记——Little Elephant and Shifts codeforces 221e
  9. kylin
  10. Codeforces 825E - Minimal Labels