介绍一下Java中的序列化与反序列化
序列化的作用、方式、规则
标准回答
序列化机制可以将对象转换成字节序列,这些字节序列可以保存到磁盘上,也可以在网络中传输,并且程序可以将这些字节序列恢复成原来的对象。其中,序列化(Serialize)是指将一个Java对象写入IO流中,而反序列化(Deserialize)则是指从IO流中恢复这个Java对象。
如果对象要支持序列化机制,则它的类需要实现Serializable接口。该接口只是一个标记接口,它没有提供任何方法,只是用来标明该类是可以序列化的。在Java中很多类都已经实现了Serializable接口,比如包装类、String、Date等。
在实现序列化和反序列化的时候,我们需要使用ObjectInputStream和ObjectOutputStream这两个流。其中,序列化时可以通过ObjectOutputStream的writeObject()输出对象序列,反序列化时可以通过ObjectInputStream的readObject()将序列恢复为对象。
加分回答
序列化的目的是将对象中的数据(成员变量)转为字节序列,和成员方法无关。为了正确地序列化某个对象,需要这个对象的类符合如下规则:
序列化与反序列化的示例如下:
/** * 序列化 */ public class IODemo { public static void main(String[] args) { testSerialize(); testDeserialize(); } public static void testSerialize() { try ( ObjectOutputStream oos = new ObjectOutputStream( new FileOutputStream("C:/work/alpha/car.txt")); ) { oos.writeObject(new Car("奔驰", "红色", 300)); oos.writeObject(new Car("宝马", "蓝色", 400)); oos.writeObject(new Car("奥迪", "黑色", 500)); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static void testDeserialize() { try ( ObjectInputStream ois = new ObjectInputStream( new FileInputStream("C:/work/alpha/car.txt")); ) { System.out.println(ois.readObject()); System.out.println(ois.readObject()); System.out.println(ois.readObject()); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } } class Car implements Serializable { private String brand; private String color; private int maxSpeed; public Car(String brand, String color, int maxSpeed) { System.out.println("Init Car."); this.brand = brand; this.color = color; this.maxSpeed = maxSpeed; } public String getBrand() { return brand; } public void setBrand(String brand) { this.brand = brand; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public int getMaxSpeed() { return maxSpeed; } public void setMaxSpeed(int maxSpeed) { this.maxSpeed = maxSpeed; } @Override public String toString() { return "Car{" + "brand='" + brand + '\'' + ", color='" + color + '\'' + ", maxSpeed=" + maxSpeed + '}'; } }
这道题你会答吗?花几分钟告诉大家答案吧!
扫描二维码,关注牛客网
下载牛客APP,随时随地刷题
得分点
序列化的作用、方式、规则
参考答案
标准回答
序列化机制可以将对象转换成字节序列,这些字节序列可以保存到磁盘上,也可以在网络中传输,并且程序可以将这些字节序列恢复成原来的对象。其中,序列化(Serialize)是指将一个Java对象写入IO流中,而反序列化(Deserialize)则是指从IO流中恢复这个Java对象。
如果对象要支持序列化机制,则它的类需要实现Serializable接口。该接口只是一个标记接口,它没有提供任何方法,只是用来标明该类是可以序列化的。在Java中很多类都已经实现了Serializable接口,比如包装类、String、Date等。
在实现序列化和反序列化的时候,我们需要使用ObjectInputStream和ObjectOutputStream这两个流。其中,序列化时可以通过ObjectOutputStream的writeObject()输出对象序列,反序列化时可以通过ObjectInputStream的readObject()将序列恢复为对象。
加分回答
序列化的目的是将对象中的数据(成员变量)转为字节序列,和成员方法无关。为了正确地序列化某个对象,需要这个对象的类符合如下规则:
延伸阅读
序列化与反序列化的示例如下: