<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>序列化 on 庞玉栋个人博客</title><link>https://pangyd.com/tags/%E5%BA%8F%E5%88%97%E5%8C%96/</link><description>Recent content in 序列化 on 庞玉栋个人博客</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Mon, 02 Oct 2017 20:44:16 +0800</lastBuildDate><atom:link href="https://pangyd.com/tags/%E5%BA%8F%E5%88%97%E5%8C%96/index.xml" rel="self" type="application/rss+xml"/><item><title>Java序列化的几种方式以及序列化的作用</title><link>https://pangyd.com/post/121-java/</link><pubDate>Mon, 02 Oct 2017 20:40:10 +0800</pubDate><guid>https://pangyd.com/post/121-java/</guid><description>&lt;h1 style="text-align: justify">一.Java序列化的作用&lt;/h1>&lt;p style="text-align: justify">有的时候我们想要把一个Java对象变成字节流的形式传出去，有的时候我们想要从一个字节流中恢复一个Java对象。例如，有的时候我们想要&lt;/p>&lt;p style="text-align: justify">把一个Java对象写入到硬盘或者传输到网路上面的其它计算机，这时我们就需要自己去通过java把相应的对象写成转换成字节流。对于这种通用&lt;/p>&lt;p style="text-align: justify">的操作，我们为什么不使用统一的格式呢？没错，这里就出现了java的序列化的概念。在Java的OutputStream类下面的子类ObjectOutput-&lt;/p>&lt;p style="text-align: justify">Stream类就有对应的WriteObject(Object object) 其中要求对应的object实现了java的序列化的接口。&lt;/p>&lt;p style="text-align: justify">为了更好的理解java序列化的应用，我举两个自己在开发项目中遇到的例子:&lt;/p>&lt;p style="text-align: justify">1)在使用tomcat开发JavaEE相关项目的时候，我们关闭tomcat后，相应的session中的对象就存储在了硬盘上，如果我们想要在tomcat重启的&lt;/p>&lt;p style="text-align: justify">时候能够从tomcat上面读取对应session中的内容，那么保存在session中的内容就必须实现相关的序列化操作。&lt;/p>&lt;p style="text-align: justify">2)如果我们使用的java对象要在分布式中使用或者在rmi远程调用的网络中使用的话，那么相关的对象必须实现java序列化接口。&lt;/p>&lt;p style="text-align: justify">亲爱的小伙伴，大概你已经了解了java序列化相关的作用，接下来们来看看如何实现java的序列化吧。~&lt;/p>&lt;h1 style="text-align: justify">二.实现java对象的序列化和反序列化。&lt;/h1>&lt;p style="text-align: justify">Java对象的序列化有两种方式。&lt;/p>&lt;p style="text-align: justify">a.是相应的对象实现了序列化接口Serializable，这个使用的比较多，对于序列化接口Serializable接口是一个空的接口，它的主要作用就是&lt;/p>&lt;p style="text-align: justify">标识这个对象时可序列化的，jre对象在传输对象的时候会进行相关的封装。这里就不做过多的介绍了。&lt;/p>&lt;p style="text-align: justify">下面是一个实现序列化接口的Java序列化的例子:非常简单&lt;/p>&lt;pre class="">&lt;code class="">&lt;span class="">package&lt;/span> com.shop.domain;&lt;span class="">import&lt;/span> java.util.Date;&lt;span class="">public&lt;/span> &lt;span class="">&lt;span class="">class&lt;/span> &lt;span class="">Article&lt;/span> &lt;span class="">implements&lt;/span> &lt;span class="">java&lt;/span>.&lt;span class="">io&lt;/span>.&lt;span class="">Serializable&lt;/span> {&lt;/span> &amp;nbsp; &amp;nbsp;&lt;span class="">private&lt;/span> &lt;span class="">static&lt;/span> &lt;span class="">final&lt;/span> &lt;span class="">long&lt;/span> serialVersionUID = &lt;span class="">1&lt;/span>L; &amp;nbsp; &amp;nbsp;&lt;span class="">private&lt;/span> Integer id; &amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span class="">private&lt;/span> String title; &amp;nbsp;&lt;span class="">//文章标题&lt;/span> &amp;nbsp; &amp;nbsp;&lt;span class="">private&lt;/span> String content; &amp;nbsp;&lt;span class="">// 文章内容&lt;/span> &amp;nbsp; &amp;nbsp;&lt;span class="">private&lt;/span> String faceIcon;&lt;span class="">//表情图标&lt;/span> &amp;nbsp; &amp;nbsp;&lt;span class="">private&lt;/span> Date postTime; &lt;span class="">//文章发表的时间&lt;/span> &amp;nbsp; &amp;nbsp;&lt;span class="">private&lt;/span> String ipAddr; &amp;nbsp;&lt;span class="">//用户的ip&lt;/span> &amp;nbsp; &amp;nbsp;&lt;span class="">private&lt;/span> User author; &amp;nbsp;&lt;span class="">//回复的用户&lt;/span> &amp;nbsp; &amp;nbsp;&lt;span class="">public&lt;/span> Integer &lt;span class="">getId&lt;/span>() { &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="">return&lt;/span> id; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp;&lt;span class="">public&lt;/span> &lt;span class="">void&lt;/span> &lt;span class="">setId&lt;/span>(Integer id) { &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="">this&lt;/span>.id = id; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp;&lt;span class="">public&lt;/span> String &lt;span class="">getTitle&lt;/span>() { &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="">return&lt;/span> title; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp;&lt;span class="">public&lt;/span> &lt;span class="">void&lt;/span> &lt;span class="">setTitle&lt;/span>(String title) { &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="">this&lt;/span>.title = title; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp;&lt;span class="">public&lt;/span> String &lt;span class="">getContent&lt;/span>() { &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="">return&lt;/span> content; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp;&lt;span class="">public&lt;/span> &lt;span class="">void&lt;/span> &lt;span class="">setContent&lt;/span>(String content) { &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="">this&lt;/span>.content = content; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp;&lt;span class="">public&lt;/span> String &lt;span class="">getFaceIcon&lt;/span>() { &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="">return&lt;/span> faceIcon; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp;&lt;span class="">public&lt;/span> &lt;span class="">void&lt;/span> &lt;span class="">setFaceIcon&lt;/span>(String faceIcon) { &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="">this&lt;/span>.faceIcon = faceIcon; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp;&lt;span class="">public&lt;/span> Date &lt;span class="">getPostTime&lt;/span>() { &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="">return&lt;/span> postTime; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp;&lt;span class="">public&lt;/span> &lt;span class="">void&lt;/span> &lt;span class="">setPostTime&lt;/span>(Date postTime) { &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="">this&lt;/span>.postTime = postTime; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp;&lt;span class="">public&lt;/span> User &lt;span class="">getAuthor&lt;/span>() { &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="">return&lt;/span> author; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp;&lt;span class="">public&lt;/span> &lt;span class="">void&lt;/span> &lt;span class="">setAuthor&lt;/span>(User author) { &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="">this&lt;/span>.author = author; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp;&lt;span class="">public&lt;/span> String &lt;span class="">getIpAddr&lt;/span>() { &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="">return&lt;/span> ipAddr; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp;&lt;span class="">public&lt;/span> &lt;span class="">void&lt;/span> &lt;span class="">setIpAddr&lt;/span>(String ipAddr) { &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="">this&lt;/span>.ipAddr = ipAddr; &amp;nbsp; &amp;nbsp;}}&lt;/code>&lt;/pre>&lt;p style="text-align: justify">b.实现序列化的第二种方式为实现接口Externalizable，Externlizable的部分源代码如下:&lt;/p></description></item></channel></rss>