Java自学笔记(20):【IO】对象流

对象的序列化和反序列化

把对象转换为字节序列的过程称为对象的序列化,Serialization           //保存对象状态并可再次读取

把字节序列恢复为对象的过程称为对象的反序列化,Deserialization    

应用:  把对象字节序列永久保存到硬盘上,在网络上传送对象的字节序列,通过序列化在进程中传递对象

只有实现了Serializable和Externalizable接口的类的对象才能被序列化

Serializable接口是一个标记接口                  Public interface Serializable{    }

Externalizable接口继承自Serializable

对象输出流

ObjectOutputStream类用于对象的序列化,即将对象输出

//Person.java
package object;

import java.io.Serializable;

public class Person implements Serializable {  //序列化
    /**
     * 
     */
    private static final long serialVersionUID = 1L;  //序列化的ID标识
    public String name;
    public int age;
}
//ObjectOutputStreamDemo
package object;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

public class ObjectOutputStreamDemo {

    public static void main(String[] args) {
        File file = new File("Person.txt");
        try {
            FileOutputStream fos = new FileOutputStream(file);
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            Person person = new Person();
            person.name= "tkj";
            person.age=17;
            oos.writeObject(person);
            oos.close();
            fos.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }    
         catch (IOException e) {
            e.printStackTrace();
        }
    }
}

对象输入流

ObjectInputStream

package object;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

public class ObjectOutputStreamDemo {

    public static void main(String[] args) {   //读取刚刚的Person
        File file = new File("Person.txt");
        try {
            FileOutputStream fos = new FileOutputStream(file);
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            Person person = new Person();
            person.name= "tkj";
            person.age=17;
            oos.writeObject(person);
            oos.close();
            fos.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }    
         catch (IOException e) {
            e.printStackTrace();
        }
    }
}

transient关键字:用来表示一个域不是对象序列化的一部分,被修饰的变量不会被序列化,static也有这样的作用


好难啊~~


猜你喜欢

转载自www.cnblogs.com/tkj521Ya/p/11287848.html
今日推荐