package test01;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;import java.util.ArrayList;import java.util.List;public class ClassCopy { public static void main(String[] args) { List<Student> list = new ArrayList<Student>(); list.add(new Student("1",1)); list.add(new Student("2",2)); list.add(new Student("3",3)); list.add(new Student("4",4)); list.add(new Student("5",5)); List<Student> copyList = new ArrayList<Student>(); try { copyList = CopyListBySerialize(list); } catch (ClassNotFoundException e) { e.PRintStackTrace(); } catch (IOException e) { e.printStackTrace(); } list.remove(2); System.out.println(list.size()); System.out.println(copyList.size()); } public static List CopyListBySerialize(List list) throws IOException, ClassNotFoundException{ //字节数组输出流在内存中创建一个字节数组缓冲区,所有发送到输出流的数据都保存在该字节数组缓冲区; ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); //创建一个对象输出流对象(对字节数组输出流对象的一个包装) /* * 为什么需要包装流:目的是为了增强流的功能,如OutputStream,只负责输出字节,字节数组,关闭等简单的原始字节操作。 * 为了使其在输出过程中具备更多的功能,如可以输出数字,布尔值,整数,小数,对象,UTF字符串等, * 则可以使用ObjectOutputStream,DataOutputStream完成各种数据的输出转换, * 并且将转换后的数据传递给被包装得原始OutputStream流,如FileOutputStream */ ObjectOutputStream out = new ObjectOutputStream(byteOut); //把集合写入对象流中 out.writeObject(list); //创建一个字节数组输入流对象,数据为之前输出流的数据 ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray()); //创建一个对象输入流对象(对字节数组输入流对象的一个包装) ObjectInputStream in = new ObjectInputStream(byteIn); //获取输出流中的对象 List copyList = (List) in.readObject(); return copyList; } }class Student implements Serializable{ private String name; private int age; public Student() { super(); } public Student(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}如实体类Student没有实现Seralizable接口的话,则会出现如下报错:
java.io.NotSerializableException: test01.Student。
正确输出为:
45
新闻热点
疑难解答