栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java利用对象流和集合实现对象的序列化与反序列化

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java利用对象流和集合实现对象的序列化与反序列化

对象的序列化是指将对象写入到文件(硬盘到内存),反序列化是将文件内容读取到控制台上面(内存到硬盘)!

代码解释、

package com.java.cq.IO.test;
import java.io.FileInputStream;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
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 ObjectInputStreamtest {

	public static void main(String [] agrs) {
		
		//创建集合
		List student=new ArrayList<>();
		//集合存放对象
		student.add(new Student("zhangsan",123555));
		student.add(new Student("san",1255));
		student.add(new Student("jakcgsan",10005));
		student.add(new Student("zjan",1255));
		//序列化
		try {
			ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("d:\学习笔记\java\ws.txt",true));
			//序列化集合
			oos.writeObject(student);
			//反序列化
			ObjectInputStream ois=new ObjectInputStream(new FileInputStream("d:\学习笔记\java\ws.txt"));
	        Object obj=ois.readObject();
	        Listdate=(List)obj;
		   for(Student students:date)
		   {
			   System.out.println(students);
		   }
			//刷新
			oos.flush();
			//关闭
			oos.close();
			
			//NotSerializableException 不支持序列化
		} catch (FileNotFoundException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
	}

	@Override
	public String toString() {
		return "ObjectInputStreamtest []";
	}
}
class Student implements Serializable{
	private static final long serialversionUID=1l;//序列化号
	 private  String name;
	 private  int 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;
	}
	public Student(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + age;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Student other = (Student) obj;
		if (age != other.age)
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}
	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + "]";
	} 
}

练习代码(小编在练习代码中自定义的类指重写了equals,toString,hashCode,ComparTo等方法

还有许多方法是没有重写的,并且要实现自定义的列可序列化必须实现Serialziable接口,小编加了一个Comparable接口是为了让对象可以存放在可排序的集合(treeset,TreeMap等))

package com.java.everdattest;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
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 Todaystest12 {
	public static void main(String [] agrs) {
		// 创建对象
		Coustmer a = new Coustmer(18, "张三");
		Coustmer b = new Coustmer(19, "李四");
		Coustmer c = new Coustmer(25, "王宝强");
		Coustmer d = new Coustmer(20, "马化腾");
		//创建集合
		Listlist =new ArrayList<>();
		//放入元素
		list.add(a);
		list.add(b);
		list.add(c);
		list.add(d);
		//创建文集
		File file=new File("D:\学习笔记\java\Todays.txt");
		if(!file.exists()) {
			try {
				file.createNewFile();
			} catch (IOException e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}
		}
		//序列化
		try {
			//如果上面没有创建文件,FileOutputStream也会自动创建文件
			//只是为了练习一下File类
			ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("D:\学习笔记\java\Todays.txt"));
			oos.writeObject(list);
			oos.flush();
			oos.close();
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
		//反序列化
		try {
			ObjectInputStream ois =new ObjectInputStream(new FileInputStream("D:\学习笔记\java\Todays.txt"));
			Object cc=ois.readObject();
			  //转化一下
			ListCoustmerDates=(List)cc;
			for(Coustmer coustmerdates:CoustmerDates) {
				System.out.println(coustmerdates);
			}	
			ois.close();
		} catch (FileNotFoundException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
	}
}

class  Coustmer implements Serializable ,Comparable{
	 int id ;
	 String name;
	//构造方法
	 Coustmer(int id ,String name){
		 this.id=id;
		 this.name=name;
	 }
	//toString
	 public String toString(){
		 return "顾客姓名:"+name
				 +" "+"顾客编号"+id;
	 }
	//equals
	 public boolean equals(Object o) {
		 if(this==o)return true;
		 if(null==o||!(o instanceof Coustmer)) return false;
		 Coustmer cc=(Coustmer)o;
		 if(this.id==cc.id&&this.name.equals(cc.name)) return true;
		 return false;
	 }
	//hashCode
	 public int hashCode() {
		 final int pr=31;
		 int re=1;
		 re=pr*re+this.id;
		 re=pr*re+((this.name==null)?0:this.name.hashCode());
		 
		 return 0;
	 }
	@Override//实现可以放入排序集合中 TreeMap TreeSet
	public int compareTo(Coustmer o) {
	
		if(this.name==o.name) {
			return this.name.compareTo(o.name);
		}else {
			return this.id=o.id;
		}
	}

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/643813.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号