java序列化的list_Java List序列化的实现

概述

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 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 listObject = Arrays.asList(obj);

}

catch (IOException e)

{

e.printStackTrace();

}

catch (ClassNotFoundException e)

{

e.printStackTrace();

}

}

}

封装

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

工具类

public class StreamUtils {

/**

* 序列化,List

*/

public static boolean writeObject(List 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 List 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.writeObject(list, new File("object.adt"));

//反序列化

List re = StreamOfByte.readObjectForList(new File("object.txt"));

---------------------

作者:M家杰

来源:CSDN

原文:https://blog.csdn.net/tyzlmjj/article/details/50332815

版权声明:本文为博主原创文章,转载请附上博文链接!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值