zoukankan      html  css  js  c++  java
  • 每天进步一点点-序列化和反序列(将对象写入硬盘文件and从硬盘文件读出对象)

    一个类如果实现了Serializable接口,那么这个类创建的对象就是所谓序列化的对象。所谓“对象序列化”: 简单一句话:使用它可以象存储文本或者数字一样简单的存储对象。一个应用是,程序在执行过程中突然遇到短电或者其他的故障导致程序终止,那么对象当前的工作状态也就会丢失,这对于有些应用来说是可怕的。用对象序列化就可以解决这个问题,因为它可以将对象的全部内容保存于磁盘的文件,这样对象执行状态也就被存储了,到需要时还可以将其从文件中按原样再读取出来,这样就解决了数据丢失问题。对象序列化可以简单这么实现:为需要被序列化的对象实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。




    import Student;
    
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.io.Serializable;
    
    class Student implements Serializable {
    	private static final long serialVersionUID = 1L;  //最好加上吧
    	String name;
    	int id;
    	int age;
    	String department;
    
    	public Student(String name, int id, int age, String department) {
    		this.age = age;
    		this.department = department;
    		this.id = id;
    		this.name = name;
    	}
    	public void say(){
    		System.out.println("hi"+name);
    	}
    }
    
    public class serializtion {
    
    	public static void main(String[] args) throws IOException {
    		Student s1 = new Student("张三", 1, 15, "化学");
    		Student s2 = new Student("李四", 2, 19, "生物");
    		Student s3 = new Student("龙儿", 2, 19, "生物"); Student s4=null;
    		FileOutputStream fout = new FileOutputStream("student.txt");
    		ObjectOutputStream out = new ObjectOutputStream(fout);
    		out.writeObject(s1);
    		out.writeObject(s2);
    		out.writeObject(s3);
    		out.close();
    		FileInputStream fin = new FileInputStream("student.txt");
    		ObjectInputStream in = new ObjectInputStream(fin);
    		try {
    			s1 = (Student) in.readObject();
    			s2 = (Student) in.readObject();
    			s4 = (Student) in.readObject();
    		} catch (ClassNotFoundException e) {//照样可以反序列化出来
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		in.close();
    		System.out.print("name:" + s1.name);
    		System.out.print(" id:" + s1.id);
    		System.out.print(" age:" + s1.age);
    		System.out.println(" department:" + s1.department);
    		System.out.print("name:" + s2.name);
    		System.out.print(" id:" + s2.id);
    		System.out.print(" age:" + s2.age);
    		System.out.println(" department:" + s2.department);
    		//name:张三 id:1 age:15 department:化学
    		//name:李四 id:2 age:19 department:生物
    		s4.say();//从文件中反序列化出来的对象照样可以调用自己的方法
    		
    	}
    }
    

      


     
  • 相关阅读:
    input输入框的各种样式
    Spring JdbcTemplate方法详解
    TF/IDF计算方法
    分布式日志收集系统--Chukwa
    分布式日志系统
    Iframe知识点
    拖拽事件
    面向对象知识点
    JS使用合并数组
    块元素block,内联元素inline; inline-block;
  • 原文地址:https://www.cnblogs.com/cs-lcy/p/7355291.html
Copyright © 2011-2022 走看看