java序列化什么时候用,Java中为什么要序列化什么时候用到序列化
大家好,java序列化什么时候用相信很多的网友都不是很明白,包括Java中为什么要序列化什么时候用到序列化也是一样,不过没有关系,接下来就来为大家分享关于java序列化什么时候用和Java中为什么要序列化什么时候用到序列化的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!
求大神,java通常在什么情况下用到序列化
Serializable
1、序列化是干什么的?
简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存object states,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。
2、什么情况下需要序列化
a)当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;
b)当你想用套接字在网络上传送对象的时候;
c)当你想通过RMI传输对象的时候;
3、当对一个对象实现序列化时,究竟发生了什么?
在没有序列化前,每个保存在堆(Heap)中的对象都有相应的状态(state),即实例变量(instance ariable)比如:
java代码
1.FoomyFoo= new Foo();
2.myFoo.setWidth(37);
3.myFoo.setHeight(70);
当通过下面的代码序列化之后,MyFoo对象中的width和Height实例变量的值(37,70)都被保存到foo.ser文件中,这样以后又可以把它从文件中读出来,重新在堆中创建原来的对象。当然保存时候不仅仅是保存对象的实例变量的值,JVM还要保存一些小量信息,比如类的类型等以便恢复原来的对象。
java代码
1.FileOutputStream fs= new FileOutputStream("foo.ser");
2.ObjectOutputStream os= new ObjectOutputStream(fs);
3.os.writeObject(myFoo);
4、实现序列化(保存到一个文件)的步骤
1)Make a FileOutputStream//创建个Fileoutputsteam
FileOutputStream fs= new FileOutputStream("foo.ser");
2)Make a ObjectOutputStream//创建个objiectoutputstream
ObjectOutputStream os=new ObjectOutputStream(fs);
3)write the object//写入特定类的对象,用方法writeobjiect()
os.writeObject(myObject1);
os.writeObject(myObject2);
os.writeObject(myObject3);
4) close the ObjectOutputStream//关闭流。
os.close();
例子:
package test;
import java.io.*;
//要保存的对象类必须实现序列化接口serializable
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();
}
}
//发序列化方法
public static void seserialize(String filename) throws Exception{
//反序列化(读出保存的对象文件)
ObjectInputStream in= new ObjectInputStream(new FileInputStream(filename));
Box box=(Box)(in.readObject());
System.out.println(box.toString());
in.close();
}
}
Java中为什么要序列化什么时候用到序列化
序列化是一种用来处理对象流的机制
,所谓对象流就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。
序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流;
什么时候使用序列化:
一:对象序列化可以实现分布式对象。主要应用例如:RMI要利用对象序列化运行远程主机上的服务,就像在本地机上运行对象时一样。
二:java对象序列化不仅保留一个对象的数据,而且递归保存对象引用的每个对象的数据。可以将整个对象层次写入字节流中,可以保存在文件中或在网络连接上传递。利用对象序列化可以进行对象的"深复制",即复制对象本身及引用的对象本身。序列化一个对象可能得到整个对象序列。
java序列化有什么作用
序列化:将一个对象的状态保存起来,然后在适当的时候再获得。序列化分为两大部分:序列化和反序列化。序列化是这个过程的第一部分,作用是将数据分解成字节流,以便存储在文件中或在网络上传输。反序列化的作用是打开字节流并重构对象。对象序列化不仅要将基本数据类型转换成字节表示,有时还要恢复数据。恢复数据要求有恢复数据的对象实例。
java里为什么要序列化
楼主的问题很有意思,不过你对序列化和反序列的应用场景搞错了,我们说的序列化和反序列化是对JAVA而言(其他面向对象语言可能也有)的,序列化的实体是个对象,结果也是个对象,并非是格式化文本,你在记事本里看到的购物信息保存记录,其实不是对象序列化的结果,而是对象输出的格式化文本,真正的序列化对象是看不懂的。
在实际使用对象序列化时,一种应用场景是将对象序列化到持久化存储(本地硬盘),我们此时不想做文件解析,也不想有人读懂这个持久化文件,当我们需要时,可以直接采用反序列化将保存的文件生成为对象;另一种应用场景是在网络传输过程中,此时对象会在不同主机上传播,序列化会将对象转成码流由对端进行解析,这个解析过程不需要人参与。
普通字符串是经过解析后的对象,有对象到字符串要加入解析逻辑,人才能看懂。
序列化的结果是个只有JAVA虚拟机认识的文件,人不参与,只是用于保存对象或传输。
解决你的问题了么?
好了,文章到此结束,希望可以帮助到大家。