第一节 对象序列化 ObjectOutputStram和ObjectInputStream 一、概述: 将堆内存中的对象存入硬盘,保留对象中的数据,称之为对象的持久化(或序列化) 二、特有方法: 1、write(int val) ---> 写入一个字节(最低八位) 2、writeInt(int vale) ---> 吸入一个32为int值 三、使用步骤: 说明:serialVersion a、给类一个可被编译器识别的的序列号,在编译类时,会分配一个long型UID,通过序列号,将类存入硬盘中,并序列化,即持久化。序列号根据成员算出的。静态不能被序列化。如果非静态成员也无需序列化,可以用transien修饰。 b、接口Serializable中没有方法,称之为标记接口 1、写入流对象: 1)创建对象写入流,与文件关联,即传入目的 2)通过写入writeObject()方法,将对象作为参数传入,即可写入文件 2、读取流对象 1)创建对象读取流,与文件关联,即传入源 2)通过writeObject()方法,读取文件中的对象,并返回这个对象
示例:
[java] view plaincopyprint?
- import java.io.*;
- //创建Person类,实现序列化
- class Person implements Serializable{
- //定义自身的序列化方式
- public static final long serialVersionUID = 42L;
- //定义私有属性
- private String name;
- private int age;
- transient String id;
- static String country = "cn";
- //构造Person类
- Person(String name,int age,String id,String country){
- this.name = name;
- this.age = age;
- this.id = id;
- this.country = country;
- }
- //覆写toString方法
- public String toString(){
- return name+ ":" + age + ":" + id + ":" + country;
- }
- }
- //对象序列化测试
- class ObjectStreamDemo{
- public static void main(String[] args){
- //对象写入流
- writeObj();
- //对象读取流
- readObj();
- }
- //定义对象读取流
- public static void readObj(){
- ObjectInputStream ois = null;
- try{
- //创建对象读取流
- ois = new ObjectInputStream(new FileInputStream("obj.txt"));
- //通过读取文件数据,返回对象
- Person p = (Person)ois.readObject();
- System.out.println(p);
- }catch (Exception e){
- throw new RuntimeException("写入文件失败");
- }
- //最终关闭流对象
- finally{
- try{
- if(ois!=null)
- ois.close();
- }catch (IOException e){
- throw new RuntimeException("写入流关闭失败");
- }
- }
- }
- //定义对象写入流
- public static void writeObj(){
- ObjectOutputStream oos = null;
- try{
- //创建对象写入流
- oos = new ObjectOutputStream(new FileOutputStream("obj.txt"));
- //写入对象数据
- oos.writeObject(new Person("lisi",25,"01","cn"));
- }catch (Exception e){
- throw new RuntimeException("写入文件失败");
- }
- //关闭流资源
- finally{
- try{
- if(oos!=null)
- oos.close();
- }catch (IOException e){
- throw new RuntimeException("写入流关闭失败");
- }
- }
- }
- }
|