美文网首页
Non-Serializable Object Stored i

Non-Serializable Object Stored i

作者: AndyMinM | 来源:发表于2018-03-27 10:59 被阅读0次

    把一个不可序列化的对象作为HttpSeesion属性来储存会破坏应用程序的可靠性。

    示例:SharerInfo sharerInfo = new SharerInfo(); getServletRequest().getSession().setAttribute( “sharerInfo”,shareInfo);

    其中SharerInfo类没有实现序列化(implements java.io.Serializable)

    为了防止session状态,服务器必须序列化HttpSeesionState对象,需要对象可以被序列化存储。为了使会话能够正常运行,为对象声明Serializable 的属性,作为应用程序属性存储在会话中的数值必须实现 Serializable 接口。

    序列化和反序列化

    Serialization是一种将对象以一连串的字节描述的过程;deserialization是将这些字符重建成对象。

    需要序列化的类实现Serializable接口就可以了,Serializable接口中没有任何方法,可以理解为一个标记,即表明这个类可以序列化。

    如果我们想要序列化一个对象,首先要创建某些OutputStream(如FileOutputStream、ByteArrayOutputStream等),然后将这些OutputStream封装在一个ObjectOutputStream中。这时候,只需要调用writeObject()方法就可以将对象序列化,并将其发送给OutputStream(记住:对象的序列化是基于字节的,不能使用Reader和Writer等基于字符的层次结构)。而反序列的过程(即将一个序列还原成为一个对象),需要将一个InputStream(如FileInputstream、ByteArrayInputStream等)封装在ObjectInputStream内,然后调用readObject()即可。

    https://blog.csdn.net/abc6368765/article/details/5136583

    serialVersionUID的作用,凡是实现Serializable接口的类都有一个表示序列化版本标识符的静态变量。生成serialVersionUID,采用add generated serial version ID方式。类的serialVersionUID的默认值完全依赖于Java编译器的实现,对于同一个类,用不同的Java编译器编译,有可能会导致不同的 serialVersionUID,也有可能相同。为了提高serialVersionUID的独立性和确定性,强烈建议在一个可序列化类中显示的定义serialVersionUID,为它赋予明确的值

    显式地定义serialVersionUID有两种用途:

    1、 在某些场合,希望类的不同版本对序列化兼容,因此需要确保类的不同版本具有相同的serialVersionUID;

    2、 在某些场合,不希望类的不同版本对序列化兼容,因此需要确保类的不同版本具有不同的serialVersionUID。

    相关文章

      网友评论

          本文标题:Non-Serializable Object Stored i

          本文链接:https://www.haomeiwen.com/subject/psjjcftx.html