一个类如果实现了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();//从文件中反序列化出来的对象照样可以调用自己的方法 }
}

  

 

最新文章

  1. 因为没用过,所以没想过的--goto
  2. 失落的C语言结构体封装艺术
  3. POJ 2376 Cleaning Shifts(轮班打扫)
  4. GIS论文翻译问题
  5. CSS HACK区别IE6、IE7、IE8、Firefox兼容性
  6. 黑盒测试用例设计方法&理论结合实际 -> 判定表驱动法
  7. python 继承和多态
  8. poj 1838
  9. ios GCD简单介绍 后台运行~
  10. vue移动端弹框组件,vue-layer-mobile
  11. CodeForces #549 Div.2 ELynyrd Skynyrd 倍增算法
  12. PHP多进程实例
  13. Object.defineProperty之observe实现
  14. gcd,lcm
  15. css学习_css背景属性及其应用
  16. Vue--vux组件库
  17. ortp 发送RTP实例
  18. IdUDPServer 收到4次重复的数据
  19. [转]OData – the best way to REST–实例讲解ASP.NET WebAPI OData (V4) Service & Client
  20. linux、SMART、Shell的学习

热门文章

  1. error MSB8008: 指定的平台工具集(V120)未安装或无效。
  2. 3.2 C++继承方式
  3. 记录搭建ssm项目
  4. Python基础学习(第4天)
  5. 四、使用汇编编写LED裸机驱动
  6. Node.js 回调函数 1) 阻塞 ,同步 2) 非阻塞 ,异步.
  7. http 协议三次握手
  8. ChinaCock界面控件介绍-TCCYearMonthSelector
  9. django面试题必问
  10. JAVA_全局配置文件(配置网址,url等等)_第二种方式