对象序列化
序列化:把Java对象转换成字节序列的过程
反序列化:把字节序列恢复成Java对象的过程
步骤:
1.创建一个类,继承Serializable
2.创建对象
3.将对象写入文件
4.从文件读取对象信息
对象的读写涉及两个类:
对象输入流ObjectInputStream
对象输出流ObjectOutputStream
实战
写一个商品类,将类的信息保存在文件中,并从文件中读取
public class Goods implements Serializable {
private String goodsId;
private String goodsName;
private double price;
public Goods(String goodsId, String goodsName, double price) {
super();
this.goodsId = goodsId;
this.goodsName = goodsName;
this.price = price;
}
public String getGoodsId() {
return goodsId;
}
public void setGoodsId(String goodsId) {
this.goodsId = goodsId;
}
public String getGoodsName() {
return goodsName;
}
public void setGoodsName(String goodsName) {
this.goodsName = goodsName;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public String toString() {
return "商品信息 [编号:" + goodsId + ", 名称:" + goodsName + ", 价格:" + price + "]";
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class Test {
public static void main(String[] args) {
// 定义Goods类对象
Goods goods1 = new Goods("gd001", "电脑", 4000);
try {
// 输出流
FileOutputStream fos = new FileOutputStream("C:\\test\\goods.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
// 输入流
FileInputStream fis = new FileInputStream("C:\\test\\goods.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
// 将Goods对象信息写入文件
oos.writeObject(goods1);
oos.writeBoolean(true);// 写入一个布尔类型的数据
oos.flush();
// 将文件的内容读取到控制台
try {
Goods rgoods1 = (Goods) ois.readObject();
System.out.println(rgoods1);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(ois.readBoolean());// 注意读写顺序,否则报EOF错误
fos.close();
oos.close();
fis.close();
ois.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO: handle exception
}
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
商品信息 [编号:gd001, 名称:电脑, 价格:4000.0]
true