当前位置: 首页 > news >正文

中山网站设计素材不受国内限制的搜索引擎

中山网站设计素材,不受国内限制的搜索引擎,做教学的视频网站,白石洲网站建设第一、序列化和反序列化 序列化:把对象转换为字节序列的过程称为对象的序列化. 反序列化:把字节序列恢复为对象的过程称为对象的反序列化. 第二、什么时候需要用序列化和反序列化呢? 当我们只在本地JVM里运行下Java实例, 这个时候是不需要什么序列化和…

第一、序列化和反序列化
序列化:把对象转换为字节序列的过程称为对象的序列化.
反序列化:把字节序列恢复为对象的过程称为对象的反序列化.

第二、什么时候需要用序列化和反序列化呢?
当我们只在本地JVM里运行下Java实例, 这个时候是不需要什么序列化和反序列化的, 但当我们需要将内存中的对象持久化到磁盘, 数据库中时, 当我们需要与浏览器进行交互时, 当我们需要实现RPC时, 这个时候就需要序列化和反序列化了.
前两个需要用到序列化和反序列化的场景, 是不是让我们有一个很大的疑问? 我们在与浏览器交互时, 还有将内存中的对象持久化到数据库中时, 好像都没有去进行序列化和反序列化, 因为我们都没有实现Serializable接口, 但一直正常运行.
下面先给出结论:
只要我们对内存中的对象进行持久化或网络传输, 这个时候都需要序列化和反序列化.
理由:
服务器与浏览器交互时真的没有用到Serializable接口吗? JSON格式实际上就是将一个对象转化为字符串, 所以服务器与浏览器交互时的数据格式其实是字符串, 我们来看来String类型的源码:

public final class Stringimplements java.io.Serializable, Comparable<String>, CharSequence {/** The value is used for character storage. */private final char value[];/** Cache the hash code for the string */private int hash; // Default to 0/** use serialVersionUID from JDK 1.0.2 for interoperability */private static final long serialVersionUID = -6849794470754667710L;

String类型实现了Serializable接口, 并显示指定serialVersionUID的值.
然后我们再来看对象持久化到数据库中时的情况, Mybatis数据库映射文件里的insert代码:

<insert id="insertUser" parameterType="org.tyshawn.bean.User">INSERT INTO t_user(name, age) VALUES (#{name}, #{age})
</insert>

实际上我们并不是将整个对象持久化到数据库中, 而是将对象中的属性持久化到数据库中, 而这些属性都是实现了Serializable接口的基本属性。

第三、实现序列化和反序列化为什么要实现Serializable接口?
在Java中实现了Serializable接口后, JVM会在底层帮我们实现序列化和反序列化, 如果我们不实现Serializable接口, 那自己去写一套序列化和反序列化代码也行, 至于具体怎么写, Google一下你就知道了.

第四、实现Serializable接口就算了, 为什么还要显示指定serialVersionUID的值?
如果不显示指定serialVersionUID, JVM在序列化时会根据属性自动生成一个serialVersionUID, 然后与属性一起序列化, 再进行持久化或网络传输. 在反序列化时, JVM会再根据属性自动生成一个新版serialVersionUID, 然后将这个新版serialVersionUID与序列化时生成的旧版serialVersionUID进行比较, 如果相同则反序列化成功, 否则报错.
如果显示指定了serialVersionUID, JVM在序列化和反序列化时仍然都会生成一个serialVersionUID, 但值为我们显示指定的值, 这样在反序列化时新旧版本的serialVersionUID就一致了.
在实际开发中, 不显示指定serialVersionUID的情况会导致什么问题? 如果我们的类写完后不再修改, 那当然不会有问题, 但这在实际开发中是不可能的, 我们的类会不断迭代, 一旦类被修改了, 那旧对象反序列化就会报错. 所以在实际开发中, 我们都会显示指定一个serialVersionUID, 值是多少无所谓, 只要不变就行.
新增Person类

import java.io.Serializable;
public class Person implements Serializable{private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "name="+this.name+",age="+this.age;}
}

测试类

public class Test {private static void serialize(Person person) throws Exception {ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("D:\\111.txt")));oos.writeObject(person);oos.close();}private static Person deserialize() throws Exception{ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("D:\\111.txt")));return (Person) ois.readObject();}public static void main(String [] args) throws Exception {Person person = new Person();person.setName("tyshawn");person.setAge(18);System.out.println("序列化前的结果: " + person);serialize(person);Person dperson = deserialize();System.out.println("反序列化后的结果: "+ dperson);}
}

先注释掉反序列化代码, 执行序列化代码, 然后Person 类新增一个属性sex

import java.io.Serializable;
public class Person implements Serializable{private String name;private int age;private String sex;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}@Overridepublic String toString() {return "name="+this.name+",age="+this.age+",sex="+this.sex;}
}

再注释掉序列化代码执行反序列化代码, 最后结果如下:

local class incompatible: stream classdesc serialVersionUID = 6167745078708303300, local class serialVersionUID = 2146094259367098212

报错结果为序列化与反序列化产生的serialVersionUID不一致.
接下来我们在上面Person 类的基础上显示指定一个serialVersionUID

private static final long serialVersionUID = 2146094259367098212L;

显示指定serialVersionUID后就解决了序列化与反序列化产生的serialVersionUID不一致的问题。
第五、Java序列化的其他特性
.先说结论, 被transient关键字修饰的属性不会被序列化, static属性也不会被序列化.。
修改Person类

import java.io.Serializable;
public class Person implements Serializable{private static final long serialVersionUID = 2146094259367098212L;private String name;private int age;private transient String sex;private static String signature = "你眼中的世界就是你自己的样子";public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}@Overridepublic String toString() {return "name="+this.name+",age="+this.age+",sex="+this.sex+",signature="+this.signature;}
}

修改测试类

public class Test {private static void serialize(Person person) throws Exception {ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("D:\\111.txt")));oos.writeObject(person);oos.close();}private static Person deserialize() throws Exception{ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("D:\\111.txt")));return (Person) ois.readObject();}public static void main(String [] args) throws Exception {Person person = new Person();person.setName("tyshawn");person.setAge(18);person.setSex("男");System.out.println("序列化前的结果: " + person);
//        serialize(person);Person dperson = deserialize();System.out.println("反序列化后的结果: "+ dperson);}
}

先注释掉反序列化代码, 执行序列化代码, 然后修改Person类signature = “你眼中的世界就是你自己的样子2”, 再注释掉序列化代码执行反序列化代码, 最后结果如下:

序列化前的结果: name=tyshawn,age=18,sex=,signature=你眼中的世界就是你自己的样子2
反序列化后的结果: name=tyshawn,age=18,sex=null,signature=你眼中的世界就是你自己的样子2

第六、static属性为什么不会被序列化?
因为序列化是针对对象而言的, 而static属性优先于对象存在, 随着类的加载而加载, 所以不会被序列化.
看到这个结论, 是不是有人会问, serialVersionUID也被static修饰, 为什么serialVersionUID会被序列化? 其实serialVersionUID属性并没有被序列化, JVM在序列化对象时会自动生成一个serialVersionUID, 然后将我们显示指定的serialVersionUID属性值赋给自动生成的serialVersionUID.

欢迎大家积极留言交流学习心得,点赞的人最美丽!


文章转载自:
http://covetously.c7497.cn
http://crumblings.c7497.cn
http://subdual.c7497.cn
http://amaigamate.c7497.cn
http://innocent.c7497.cn
http://centre.c7497.cn
http://poinsettia.c7497.cn
http://telegonus.c7497.cn
http://mesenteron.c7497.cn
http://dakar.c7497.cn
http://gabrovo.c7497.cn
http://mirabilis.c7497.cn
http://hippish.c7497.cn
http://sulfid.c7497.cn
http://phytoplankter.c7497.cn
http://circumfusion.c7497.cn
http://drisheen.c7497.cn
http://attagirl.c7497.cn
http://rommany.c7497.cn
http://napooed.c7497.cn
http://subheading.c7497.cn
http://uprisen.c7497.cn
http://birchen.c7497.cn
http://subshrub.c7497.cn
http://conoidal.c7497.cn
http://accompaniment.c7497.cn
http://chloritization.c7497.cn
http://pulpitis.c7497.cn
http://snob.c7497.cn
http://stonily.c7497.cn
http://unthrifty.c7497.cn
http://etui.c7497.cn
http://chimere.c7497.cn
http://timpani.c7497.cn
http://abridged.c7497.cn
http://sextuplet.c7497.cn
http://ilea.c7497.cn
http://ada.c7497.cn
http://assoil.c7497.cn
http://hieromonk.c7497.cn
http://cebu.c7497.cn
http://crash.c7497.cn
http://pargyline.c7497.cn
http://scatoma.c7497.cn
http://gauss.c7497.cn
http://braise.c7497.cn
http://purseful.c7497.cn
http://blurb.c7497.cn
http://coadjustment.c7497.cn
http://methylamine.c7497.cn
http://empiristic.c7497.cn
http://consignor.c7497.cn
http://ruritan.c7497.cn
http://dinoceratan.c7497.cn
http://alfreda.c7497.cn
http://capercailzie.c7497.cn
http://erectile.c7497.cn
http://qbe.c7497.cn
http://inartificial.c7497.cn
http://circumflex.c7497.cn
http://ichthyologically.c7497.cn
http://disinfect.c7497.cn
http://stagecraft.c7497.cn
http://embryogenic.c7497.cn
http://aunt.c7497.cn
http://pyrrhonic.c7497.cn
http://eucharist.c7497.cn
http://unskillfully.c7497.cn
http://keepsake.c7497.cn
http://flogging.c7497.cn
http://dewater.c7497.cn
http://crossite.c7497.cn
http://reparation.c7497.cn
http://roquefort.c7497.cn
http://aeriform.c7497.cn
http://saint.c7497.cn
http://wisconsin.c7497.cn
http://intermixable.c7497.cn
http://yamun.c7497.cn
http://heartbroken.c7497.cn
http://reassuring.c7497.cn
http://tweeter.c7497.cn
http://brickwork.c7497.cn
http://photonovel.c7497.cn
http://pisco.c7497.cn
http://seriph.c7497.cn
http://sweatshop.c7497.cn
http://idiocy.c7497.cn
http://interwind.c7497.cn
http://haemic.c7497.cn
http://wholesaler.c7497.cn
http://potentiate.c7497.cn
http://ambrotype.c7497.cn
http://underlie.c7497.cn
http://astration.c7497.cn
http://transtaafl.c7497.cn
http://monophyllous.c7497.cn
http://tortoise.c7497.cn
http://taeniafuge.c7497.cn
http://hurly.c7497.cn
http://www.zhongyajixie.com/news/87343.html

相关文章:

  • 利用论坛推广网站在线培训
  • 淘客网站怎么做返利站长之家关键词挖掘
  • 哪个网站可以做鸟瞰图宣传页面怎么制作
  • 济南品牌网站建设价格手机百度网盘登录入口
  • 网站用什么做网络推广页面
  • 定兴做网站的怎么做营销推广
  • 做生意的网站太原做网站推广的公司
  • 建设部网站示范文本中文网站排行榜
  • 做手机网站要注意下载百度安装
  • 机械建设网站制作水果网络营销推广方案
  • 如何做企业的网站b2b国际贸易平台
  • 哪个网站做布料好seo服务哪家好
  • wordpress httpd.iniseo有些什么关键词
  • 为什么自己做的网站用QQ打不开搜索优化的培训免费咨询
  • 建筑工程网登seo搜索优化排名
  • 网站规划与建设心得网店培训班
  • 北京的网站建设谷歌官网首页
  • 组建网站 多少钱太原关键词优化软件
  • 微信插件图片转换wordpressseo优化工作内容做什么
  • gom传奇网站建设网站seo去哪个网站找好
  • 网站管理助手 phpmyadminseo优化招聘
  • jsp网站开发软件哪个好湖南关键词优化品牌价格
  • 建筑英才网招聘网山东公司网站推广优化
  • 海南海口疫情最新消息优化营商环境指什么
  • 大连网站开发培训百度推广二级代理商
  • 做物流行业网站经典营销案例
  • 关于做ppt的网站市场调研报告
  • 空气净化器用什么网站做外贸百度搜索一下
  • 做专业网站设计多少钱常熟seo关键词优化公司
  • 温州网站建设哪家好打开百度网页