×

serializer作用

serializer作用(请问Serializable序列化的作用,到底是什么)

admin admin 发表于2023-04-14 10:37:09 浏览49 评论0

抢沙发发表评论

本文目录

请问Serializable序列化的作用,到底是什么


类通过实现 java.io.Serializable 接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化。序列化接口Serializable没有方法或字段,仅用于标识可序列化的语义
例子:
package woxingwosu;
import java.io.Serializable;
public class A implements Serializable{
private String name=“my name is a“;
private B b=null;
A(){
b=new B();
}
public B getB() {
return b;
}
public void setB(B b) {
this.b = b;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String show(){
return “a.toString 《a.name=\““+this.name+“\“ a.b.name=\““+this.b.getName()+“\“》“
+“\na=“+this.toString()+“ b=“+this.b.toString();
}
}
class B
package woxingwosu;
import java.io.Serializable;
public class B implements Serializable{
private String name=“my name is B“;
B(){}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class WriteSeri
package woxingwosu;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
/**
* 写Object(系列化)
* @author 我行我素
*/
public class WriteSeri {
public static void main(String args) {
ObjectOutputStream outObj=null;
try{
FileOutputStream outStr=new FileOutputStream(“obj.txt“);
outObj=new ObjectOutputStream(outStr);
A a=new A();
outObj.writeObject(a);
System.out.println(“write obj :“+a.show());
outObj.flush();
}catch(Exception e){
e.printStackTrace();
}finally{
try{
if(outObj!=null)
outObj.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
}
class ReadSeri
package woxingwosu;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
/**
* 读Object(反系列化)
* @author 我行我素
*/
public class ReadSeri {
public static void main(String args) {
ObjectInputStream inObj=null;
try{
FileInputStream inStr=new FileInputStream(“obj.txt“);
inObj=new ObjectInputStream(inStr);
A a=(A)inObj.readObject();
System.out.println(“read Object :“+a.show());
}catch(Exception e){
e.printStackTrace();
}finally{
try{
if(inObj!=null)
inObj.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
}

java中serializable是什么意思有什么作用


java Serializable,就是java提供的通用数据保存和读取的接口。
序列化类的所有子类本身都是可序列化的。这个序列化接口没有任何方法和域,仅用于标识序列化的语意。允许非序列化类的子类型序列化,子类型可以假定负责保存和恢复父类型的公有的、保护的和(如果可访问)包的域的状态。只要该类(扩展)有一个无参构造子,可初始化它的状态,那么子类型就可承担上述职责。在这种情况下申明一个可序列化的类是一个错误。此错误将在运行时被检测。就是可以把对象存到字节流,然后可以恢复

serializable接口的作用


调用outputStream的writeObject方法时,必须要实现serializable接口,这样javac编译时才会进行特殊处理,编译的类才能被writeObject方法操作。该接口是一个mini接口,没有必须要实现的方法,implements Serializable只是为了标注该对象是可被序列化的。如果你的对象要经过分布式系统进行网络传输或通过rmi等远程调用,这就需要在网络上传输对象,被传输的对象就必须实现Serializable接口。

为什么要实现Serializable


最重要的两个原因是:

1、将对象的状态保存在存储媒体中以便可以在以后重新创建出完全相同的副本;

2、按值将对象从一个应用程序域发送至另一个应用程序域。

实现serializable接口的作用是就是可以把对象存到字节流,然后可以恢复。所以你想如果你的对象没实现序列化怎么才能进行网络传输呢,要网络传输就得转为字节流,所以在分布式应用中,你就得实现序列化,如果你不需要分布式应用,那就没那个必要实现序列化。

扩展资料:

public interface Serializable类通过实现 java.io.Serializable 接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化。可序列化类的所有子类型本身都是可序列化的。序列化接口没有方法或字段,仅用于标识可序列化的语义。

要允许不可序列化类的子类型序列化,可以假定该子类型负责保存和还原超类型的公用 (public)、受保护的 (protected) 和(如果可访问)包 (package) 字段的状态。仅在子类型扩展的类(父类)有一个可访问的无参数构造方法来初始化该类的状态时,才可以假定子类型有此责任。

如果不是这种情况,则声明一个类为可序列化类是错误的。该错误将在运行时检测到。

在反序列化过程中,将使用该类的公用或受保护的无参数构造方法初始化不可序列化类的字段。可序列化的子类必须能够访问无参数的构造方法。可序列化子类的字段将从该流中还原。

参考资料:百度百科-serializable接口


序列化主要起什么作用 一般在什么时候用


主要是将内存中的数据组织成为一个或一组可见的数据流。我们常见的有xml序列化和二进制序列化。
而在应用方面,webService就使用的是xml序列化,它将需要进行网络传输的数据信息转化成为具有指定架构(XSD)格式的xml(WSDL),并使用指定的传输协议进行数据传输。
对于二进制序列化,应用的地方也很多,例如许多需要临时保存的内容,而又不需要使用数据库时,我们可以将内存中的对象保存到文件系统中,这时就需要进行二进制序列化。最常见的应用就是我们玩游戏时的保存记录。

[Serialization]具体怎么用


序列化,
序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。
.NET Framework 提供两种序列化技术:
•二进制序列化保持类型保真度,这对于在应用程序的不同调用之间保留对象的状态很有用。例如,通过将对象序列化到剪贴板,可在不同的应用程序之间共享对象。您可以将对象序列化到流、磁盘、内存和网络等等。远程处理使用序列化“通过值”在计算机或应用程序域之间传递对象。
•XML 序列化仅序列化公共属性和字段,且不保持类型保真度。当您要提供或使用数据而不限制使用该数据的应用程序时,这一点是很有用的。由于 XML 是一个开放式标准,因此,对于通过 Web 共享数据而言,这是一个很好的选择。SOAP 同样是一个开放式标准,这使它也成为一个颇具吸引力的选择。