一.序列化作用
java 对象在网络中传输或者需要把java对象持久化到磁盘中。
二.注意事项
1.class 版本有可能改变,所以需要给一个序列化id serialVersionUID
2.可以通过transient 关键字声明某个属性不用被序列化
3. Externalizable 接口的 writeExternal 和 readExternal 自定义序列化属性
三.实现方式
1.实现Serializable接口
public class Person implements Serializable{
private static final long serialVersionUID = 1L;
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void tString(){
System.out.println("name: "+ this.name + " age:" + this.age);
}
}
2. 实现 Externalizable接口
public class Car implements Externalizable{
private static final long serialVersionUID = 1L;
private String cartype;
private String color;
private int qudong;
public String getCartype() {
return cartype;
}
public void setCartype(String cartype) {
this.cartype = cartype;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public int getQudong() {
return qudong;
}
public void setQudong(int qudong) {
this.qudong = qudong;
}
@Override
public void writeExternal(ObjectOutput out) throws IOException {
out.writeObject(cartype);
out.writeObject(color);
out.writeInt(qudong);
}
@Override
public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException {
this.cartype = (String)in.readObject();
this.color = (String)in.readObject();
this.qudong = in.readInt();
}
public void print(){
System.out.println("cartype:" + this.cartype + " color:" + color + " qudong:" + qudong);
}
}
测试类如下:
public class TestSerializa {
public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException{
Person person = new Person();
person.setName("wyl");
person.setAge(10);
ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream("D:\\person.txt"));
outputStream.writeObject(person);
ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream("D:\\person.txt"));
Person per = (Person)inputStream.readObject();
per.tString();
Car car = new Car();
car.setCartype("audi");
car.setColor("black");
car.setQudong(4);
ObjectOutputStream carOutput = new ObjectOutputStream(new FileOutputStream("D:\\car.txt"));
carOutput.writeObject(car);
ObjectInputStream carInput = new ObjectInputStream(new FileInputStream("D:\\car.txt"));
Car car1 = (Car)carInput.readObject();
car1.print();
}
}
四.图片序列化
public class ImageSerializable {
public static void main(String[] args) throws FileNotFoundException, IOException{
File file = new File("D:\\电子发票1.jpg");
BufferedImage bi = ImageIO.read(file);
ImageIO.write(bi, "jpg", new FileOutputStream("D:\\hhh.txt"));
BufferedImage imag = ImageIO.read(new FileInputStream("D:\\hhh.txt"));
ImageIO.write(imag, "jpg", new FileOutputStream("D:\\hhh.jpg"));
}
}