java什么是序列化和反序列化,什么是java序列化,如何实现序列化
如何解决写爬虫IP受阻的问题?立即使用。
简要解释:
序列化是一种用于处理对象流的机制,即流式传输对象的内容。您可以读写流式对象,也可以在网络之间传输流式对象。
序列化是为了解决读写对象流带来的问题。序列化的实现:实现要序列化的类的Serializable接口,该接口没有方法可实现。实现Serializable只是为了标记对象可以序列化,然后用一个输出流(比如FileOutputStream)构造一个ObjectOutputStream对象。然后用ObjectOutputStream对象的writeObject(Object obj)方法写出带有obj参数的对象(即保存其状态),再用输入流还原。
详细解释:
当两个进程进行远程通信时,它们可以互相发送各种类型的数据。无论是什么类型的数据,都会以二进制序列的形式在网络上传输。发送方需要将这个Java对象转换成字节序列,然后才能在网络上传输;接收者需要将字节序列恢复到一个Java对象。
只有支持java.io.Serializable接口的对象才能写入流中。对每个可序列化对象的类进行编码,包括类名和类签名、对象的字段值和数组值,以及从初始对象引用的所有其他对象的闭包。
1.概念
序列化:将Java对象转换成字节序列的过程。
反序列化:将字节序列恢复到Java对象的过程。
2.用途
对象的序列化有两个主要目的:
(1)对象的字节序列被永久保存到硬盘上,通常存储在一个文件中;
(2)在网络上传输对象的字节序列。
3.对象序列化
序列化API
Java.io.ObjectOutputStream表示对象输出流,其writeObject(Object obj)方法可以序列化参数指定的obj对象,并将字节序列写入目标输出流。只有实现可序列化和可外部化接口的类的对象才能被序列化。
Java.io.ObjectInputStream表示对象输入流,其readObject()方法从源输入流中读取字节序列,将它们反序列化为对象,然后返回它们。
代码示例
导入Java . io . *;
导入Java . util . date;
公共类ObjectSaver {
公共静态void main(String[] args)引发异常{
/*其中D:\\objectFile.obj表示存储序列化对象的文件*/
//序列化对象
object output stream out=new object output stream(new file output stream( D:\ \ object file . obj );
客户客户=新客户(只是湿透了,24);
Out.writeObject (Hello!);//写入文字常量
out . writeobject(new Date());//编写一个匿名日期对象
out.writeObject(客户);//编写客户对象
out . close();
//反序列化该对象
ObjectInputStream in=new ObjectInputStream(new file inputstream( D:\ \ object file . obj );
system . out . println( obj 1 (String)in . read object());//读取文字常量
system . out . println( obj 2 (Date)in . read object());//读取匿名日期对象
客户obj3=(客户)in . read object();//读取客户对象
system . out . println( obj 3 obj 3);
in . close();
}
}
客户类实现可序列化{
私有字符串名称;
私人年龄;
公共客户(字符串名称,整数){
this.name=name
this.age=年龄;
}
公共字符串toString() {
return name= name ,age= age
}
}执行结果:
4.说明
阅读对象的顺序要和书写的顺序一致。
对象的默认序列化机制写:对象的类、类签名、非瞬态和非静态字段的值。
我们,大量免费的Java入门教程,欢迎在线学习!这就是java序列化的细节。请多关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。