做公众号链接的网站,景区网站模板,新能源网站建设,怎么查自己团员信息1、序列化是干什么的#xff1f;简单说就是为了保存在内存中的各种对象的状态#xff0c;并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存Object States#xff0c; 但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。2…1、序列化是干什么的简单说就是为了保存在内存中的各种对象的状态并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存Object States 但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。2、什么情况下需要序列化 当你想把的内存中的对象保存到一个文件中或者数据库中时候当你想用序列化在网络上传送对象的时候当你想通过RMI传输对象的时候3、当对一个对象实现序列化时究竟发生了什么在没有序列化前每个保存在堆Heap中的对象都有相应的状态state即实例变量instance ariable比如 1 Foo myFoo new Foo();
2 myFoo .setWidth(37);
3 myFoo.setHeight(70); 当通过下面的代码序列化之后MyFoo对象中的width和Height实例变量的值3770都被保存到foo.ser文件中这样以后又可以把它 从文件中读出来重新在堆中创建原来的对象。 保存时候不仅仅是保存对象的实例变量的值JVM还要保存一些小量信息比如类的类型等以便恢复原来的对象。 1 FileOutputStream fs new FileOutputStream(foo.ser);
2 ObjectOutputStream os new ObjectOutputStream(fs);
3 os.writeObject(myFoo); 4、实现序列化保存到一个文件的步骤 Make a FileOutputStream 1 FileOutputStream fs new FileOutputStream(foo.ser);
2 Make a ObjectOutputStream ObjectOutputStream os new ObjectOutputStream(fs);
write the object write the object os.writeObject(myObject1);os.writeObject(myObject2); os.writeObject(myObject3); close the ObjectOutputStream java 代码 os.close(); 5、举例说明 import java.io.*; public class Box implements Serializable {private int width;private int height; public void setWidth(int width){ this.width width; } public void setHeight(int height){this.height height; } public static void main(String[] args){ Box myBox new Box();myBox.setWidth(50);myBox.setHeight(30);try{FileOutputStream fs new FileOutputStream(foo.ser); ObjectOutputStream os new ObjectOutputStream(fs); os.writeObject(myBox); os.close(); }catch(Exception ex){ ex.printStackTrace(); } }
} 6、相关注意事项 a当一个父类实现序列化子类自动实现序列化不需要显式实现Serializable接口 b当一个对象的实例变量引用其他对象序列化该对象时也把引用对象进行序列化 c并非所有的对象都可以序列化,至于为什么不可以有很多原因了 比如 1.安全方面的原因比如一个对象拥有privatepublic等field对于一个要传输的对象 比如写到文件或者进行rmi传输 等等在序列化进行传输的过程中这个对象的private等域是不受保护的。 2. 资源分配方面的原因比如socketthread类如果可以序列化进行传输或者保存 也无法对他们进行重新的资源分配而且也是没有必要这样实现 把一个对象完全转成字节序列方便传输。 就像你寄一箱饼干因为体积太大就全压成粉末紧紧地一包寄出去这就是序列化的作用。
只不过JAVA的序列化是可以完全还原的。 转载于:https://www.cnblogs.com/douzi520/p/9497889.html