之前不理解的序列化和反序列化看了之后秒懂!
如何让一个类在网络里面传输
序列化是什么?
序列化是要和io流在一起联系的,他的出现就是解决了类可以在网络里面传输。
重点:序列化就是保存数据的时候,要保存数据的值和数据的类型
例如:int i = 10; 你要保存的就是 10 和 int 这两个东西。
反序列化是什么?
重点:反序列化,就是你保存的数据的时候取出来的时候,是取他的值和数据类型的。
例如:你保存了一个Dog东西,取的时候他也要是一个Dog东西。
类要可以被序列化是有条件的
你的这个类必须实现两个接口
Serializable:一般是推荐使用这个接口的,他就是一个标记性的接口
Exetrnlizable:这个接口要现实他的方法,不推荐。
Java提供两个包装流/节点流针对于序列化的操作
ObjectOutputStream 序列化,从内存里面写对象到磁盘里面
public class Dome {
public static void main(String[] args) throws IOException {
//这里ObjectOutputStream 是包装流里面要存放一个节点流的
ObjectOutput objectOutput = new ObjectOutputStream(new FileOutputStream("D://a.bat"));
//这里写的时候,这个100会自动装箱
objectOutput.writeInt(100);
//这个是序列化一个对象
objectOutput.writeObject(new Dog("小黄"));
//记得关闭流
objectOutput.close();
}
}
class Dog implements Serializable{
String name;
public Dog(String name) {
this.name = name;
}
} ObjectInputStream 反序列化,从磁盘里面的文件读取到内存
public class Dome2 {
public static void main(String[] args) throws IOException, ClassNotFoundException {
ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("D://a.bat"));
//重点反序列化读取的数据必须和你写入序列化数据一致
int i = objectInputStream.readInt();
Object o = objectInputStream.readObject();
System.out.println(i);
System.out.println(o);
objectInputStream.close();
}
} 序列化细节
#Java学习#1,读写顺序一致。
2,类必须要实现序列化接口。
3,类里面可以添加SerialVersionUID = 1L;属性提高版本的兼容性例如:你在序列化的类里面添加了一个属性,他就不会认为这个类是新的类,他会理解成为这个类在弄版本的变更。
4,序列化的时候,默认全部属性都序列化的除了static,transient修饰的属性。
5,实例化类的属性必须实现序列化的接口,如果父类实现了序列化接口,子类会自动继承过来的。

查看15道真题和解析