Java学习提要——对象序列化

1.对象序列化的基本应用

所谓的对象序列化指的就是将保存在内存中的对象数据
转换为二进制数据流进行传输的操作。
但是不是所有类的对象都可以进行序列化,
那么其所在的类一定要实现 java.io.Serializable接口

!其接口没有任何操作方法,它是一个标识接口,表示的是一种能力。

//定义一个可以被序列化对象的类
import java.io.Serializable;

@SuppressWarning("serial")
class Book implements Serializable {  //此类的对象可以被序列化
    //压制警告信息,之所以有警告是由于序列化与反序列化的版本问题,可自行去了解
    private String title ;
    private double price ;
    public Book(String title,double price) {
        this.title = title ;
        this.price = price ;
    }
    public String toString() {
        return this.title + this.price;
    }
}
public class Nice {
    public static void main(String [] args) throws Exception{

    }
}

实现序列化与反序列化,需要有两个类的支持

·序列化类:java.io.ObjectOutputStream;将对象变成了指定格式的二进制数据
·反序列化类:java.io.ObjectInputStream;可以将序列化的对象转换为对象内容

//实现序列化对象的操作——ObjectOutputStream

//构造方法
public ObjectOutputStream(OutputStream out) throws IOExeption;

//输出对象
public final void writeObject (Object obj) throws IOException;
//实现序列化
//将对象序列化到文件里面
import java.io.Serializable;

@SuppressWarning("serial")
class Book implements Serializable {  //此类的对象可以被序列化
    //压制警告信息,之所以有警告是由于序列化与反序列化的版本问题,可自行去了解
    private String title ;
    private double price ;
    public Book(String title,double price) {
        this.title = title ;
        this.price = price ;
    }
    public String toString() {
        return this.title + "," + this.price;
    }
}

public class Nice {
    public static void main(String args []) throws Exception{
        ser();
    }
    public static void ser() throws Exception {
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("E:"+File.separator+"test.ser"))
        oos.writeObject(new Book("java",59.9));  //序列化对象
        oos.close();
    }
}
//实现反序列化的操作——ObjectInputStream

//构造方法
public ObjectInputStream(InputStream in) throws IOException;

//读取方法
public final Object readObject() throws IOException,ClassNotFoundException
//实现反序列化,接上面代码补充
//将对象序列化到文件里面,随后再通过文件反序列化到程序之中
import java.io.Serializable;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

@SuppressWarning("serial")
class Book implements Serializable {  //此类的对象可以被序列化
    //压制警告信息,之所以有警告是由于序列化与反序列化的版本问题,可自行去了解
    private String title ;
    private double price ;
    public Book(String title,double price) {
        this.title = title ;
        this.price = price ;
    }
    public String toString() {
        return this.title + "," + this.price;
    }
}

public class Nice {
    public static void main(String args []) throws Exception{
        dser();
    }
    public static void ser() throws Exception {
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("E:"+File.separator+"test.ser"));
        oos.writeObject(new Book("java",59.9));  //序列化对象
        oos.close();
    }
    public static void dser() throws Exception {
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("E:"+File.separator+"test.ser")));
        Object obj = ois.readObject();  //按照Object读取
        Book book = (Book) obj;
        System.out.println(book);
        ois.close();
    }
}

2.transient 关键字(了解)

序列化时,某些属性的内容不需要保存,就可以用此关键字

使用格式:private transient String str;
作用:这个属性将无法序列化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值