深圳培训java工程师,编程语言培训真的靠谱么?深圳达内宝安中心咨询电话:13760430810,提供安卓培训,ios培训,3g培训,java培训等it岗前培训,大学生可申请“先就业就业后分期还”,深圳达内学员入职it名企,年薪5-10万!
【java培训学堂】java 序列化serializable详解
1、什么是序列化和反序列化
serialization(序列化)是一种将对象以一连串的字节描述的过程;反序列化deserialization是一种将这些字节重建成一个对象的过程。
2、什么情况下需要序列化
a)当你想把的内存中的对象保存到一个文件中或者数据库中时候;
b)当你想用套接字在网络上传送对象的时候;
c)当你想通过rmi传输对象的时候;
3、如何实现序列化
将需要序列化的类实现serializable接口就可以了,serializable接口中没有任何方法,可以理解为一个标记,即表明这个类可以序列化。
4、序列化和反序列化例子
如果我们想要序列化一个对象,扌先要创建某些outputstream(如fileoutputstream、bytearrayoutputstream等),然后将这些outputstream封装在一个objectoutputstream中。这时候,只需要调用writeobject()方法就可以将对象序列化,并将其发送给outputstream(记住:对象的序列化是基于字节的,不能使用reader和writer等基于字符的层次结构)。而反序列的过程(即将一个序列还原成为一个对象),需要将一个inputstream(如fileinputstream、bytearrayinputstream等)封装在objectinputstream内,然后调用readobject()即可。
5、序列化id
序列化 id 在 eclipse 下提供了两种生成策略,一个是固定的 1l,一个是随机生成一个不重复的 long 类型数据(实际上是使用 jdk
工具生成),在这里有一个建议,如果没有特殊需求,就是用默认的 1l
就可以,这样可以确保代码一致时反序列化成功。这也可能是造成序列化和反序列化失败的原因,因为不同的序列化id之间不能进行序列化和反序列化。
6.序列化前和序列化后的对象的关系
是 ==还是equal? or 是浅复制还是深复制?
回答:深复制,反序列化还原后的对象地址与原来的的地址不同
序列化前后对象的地址不同了,但是内容是一样的,而且对象中包含的引用也相同。换句话说,通过序列化操作,我们可以实现对任何可serializable对象的”深度复制(deep
copy)——这意味着我们复制的是整个对象网,而不仅仅是基本对象及其引用。对于同一流的对象,他们的地址是相同,说明他们是同一个对象,但是与其他流的对象地址却不相同。也就说,只要将对象序列化到单一流中,就可以恢复出与我们写出时一样的对象网,而且只要在同一流中,对象都是同一个。
7.静态变量能否序列化
若把上面的代码中的 age变量前加上 static ,输出任然是
name=sheepmu
age=24输出结果为:
name=sheepmu
age=1
为何把蕞上面代码的age变量添上static
后还是反序列化出了24呢?而新的从新对变量赋值的代码,不是static的得到了序列化本身的值,而static的则得到的是从新附的值。原因:
序列化会忽略静态变量,即序列化不保存静态变量的状态。静态成员属于类级别的,所以不能序列化。即
序列化的是对象的状态不是类的状态。这里的不能序列化的意思,是序列化信息中不包含这个静态成员域。蕞上面添加了static后之所以还是输出24是因为该值是jvm加载该类时分配的值。注:transient后的变量也不能序列化,但是情况稍复杂,稍后开篇说。
8、总结:
a)当一个父类实现序列化,子类自动实现序列化,不需要显式实现serializable接口;
b)当一个对象的实例变量引用其他对象,序列化该对象时也把引用对象进行序列化;
c) static,transient后的变量不能被序列化;
【java菜鸟教程2】java关系运算符
关系运算符
下面为java支持的关系运算符
表格中的实例整数变量a的值为10,变量b的值为20:
运算符描述例子
==检查如果两个操作数的值是否相等,如果相等则条件为真。(a == b)为假(非真)。
!=检查如果两个操作数的值是否相等,如果值不相等则条件为真。(a != b) 为真。
> 检查左操作数的值是否大于右操作数的值,如果是那么条件为真。(a> b)非真。
< 检查左操作数的值是否小于右操作数的值,如果是那么条件为真。(a
> =检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。(a> = b)为假。
<=检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。(a <= b)为真。
想要了解更多的朋友,可以搜索“达内深圳java培训”,进行详细了解!选择达内深圳java培训,不再孤军奋战,轻轻松松做it高薪白领。深圳java培训带领有明确目标的学子迈向成功之路!
深圳市龙华区达内职业技能培训学校
15919897756