导航:首页 > 编程语言 > java泛型序列化

java泛型序列化

发布时间:2021-11-25 16:21:48

java 可序列化类型都有哪些

API中找到Serializable的子接口的实现类就可以知道了;
AdapterActivator, Attribute, Attribute, Attributes, BindingIterator, ClientRequestInfo, ClientRequestInterceptor, Codec, CodecFactory, Control, Current, Current, Current, CustomValue, DataInputStream, DataOutputStream, Descriptor, DHPrivateKey, DHPublicKey, DocAttribute, DomainManager, DSAPrivateKey, DSAPublicKey, DynAny, DynAnyFactory, DynArray, DynEnum, DynFixed, DynSequence, DynStruct, DynUnion, DynValue, DynValueBox, DynValueCommon, ECPrivateKey, ECPublicKey, ExtendedRequest, ExtendedResponse, Externalizable, IdAssignmentPolicy, IDLEntity, IDLType, IdUniquenessPolicy, ImplicitActivationPolicy, Interceptor, IORInfo, IORInterceptor, IORInterceptor_3_0, IRObject, Key, LifespanPolicy, Name, NamingContext, NamingContextExt, NotificationFilter, ObjectReferenceFactory, ObjectReferenceTemplate, ORBInitializer, ORBInitInfo, PBEKey, POA, POAManager, Policy, PolicyFactory, PrintJobAttribute, PrintRequestAttribute, PrintServiceAttribute, PrivateKey, PublicKey, QueryExp, RelationType, RemoteRef, RequestInfo, RequestProcessingPolicy, RSAMultiPrimePrivateCrtKey, RSAPrivateCrtKey, RSAPrivateKey, RSAPublicKey, RunTime, SecretKey, ServantActivator, ServantLocator, ServantManager, ServantRetentionPolicy, ServerRef, ServerRequestInfo, ServerRequestInterceptor, StreamableValue, SupportedValuesAttribute, ThreadPolicy, UnsolicitedNotification, ValueBase, ValueExp

--------------------------------------------------------------------------------

⑵ 某些java类为什么要实现Serializable接口

Serializable接口是启用其序列化功能的接口。实现java.io.Serializable
接口的类是可序列化的。没有实现此接口的类将不能使它们的任一状态被序列化或逆序列化。
使用情况:
当遍历一个图形时,可能会遇到不支持可序列化接口的对象。在此情况下,将抛出
NotSerializableException,并将标识不可序列化对象的类。
在序列化和反序列化过程中需要特殊处理的类必须使用下列准确签名来实现特殊方法:
private
void
writeObject(java.io.ObjectOutputStream
out)
throws
IOException
private
void
readObject(java.io.ObjectInputStream
in)
throws
IOException,
ClassNotFoundException;
writeObject
方法负责写入特定类的对象的状态,以便相应的
readObject
方法可以还原它。通过调用
out.defaultWriteObject
可以调用保存
Object
的字段的默认机制。该方法本身不需要涉及属于其超类或子类的状态。状态是通过使用
writeObject
方法或使用
DataOutput
支持的用于基本数据类型的方法将各个字段写入
ObjectOutputStream
来保存的。
readObject
方法负责从流中读取并还原类字段。它可以调用
in.defaultReadObject
来调用默认机制,以还原对象的非静态和非瞬态字段。defaultReadObject
方法使用流中的信息来分配流中通过当前对象中相应命名字段保存的对象的字段。这用于处理类发展后需要添加新字段的情形。
将对象写入流时需要指定要使用的替代对象的可序列化类,应使用准确的签名来实现此特殊方法:
ANY-ACCESS-MODIFIER
Object
writeReplace()
throws
ObjectStreamException;

writeReplace
方法将由序列化调用,前提是如果此方法存在,而且它可以通过被序列化对象的类中定义的一个方法访问。因此,该方法可以拥有私有
(private)、受保护的
(protected)
和包私有
(package-private)
访问。子类对此方法的访问遵循
java
访问规则。
在从流中读取类的一个实例时需要指定替代的类应使用的准确签名来实现此特殊方法。
ANY-ACCESS-MODIFIER
Object
readResolve()
throws
ObjectStreamException;

readResolve
方法遵循与
writeReplace
相同的调用规则和访问规则。
序列化运行时使用一个称为
serialVersionUID
版本号与每个可序列化类相关联,该序列号在反序列化过程中用于验证序列化对象的发送者和接收者是否为该对象加载了与序列化兼容的类。如果接收者加载的该对象的类的
serialVersionUID
与对应的发送者的类的版本号不同,则反序列化将会导致
InvalidClassException。可序列化类可以通过声明名为
"serialVersionUID"
的字段(该字段必须是静态
(static)、最终
(final)

long
型字段)显式声明其自己的
serialVersionUID:
ANY-ACCESS-MODIFIER
static
final
long
serialVersionUID
=
42L;
如果可序列化类未显式声明
serialVersionUID,则序列化运行时将基于该类的各个方面计算该类的默认
serialVersionUID
值,如“Java(TM)
对象序列化规范”中所述。不过,强烈建议
所有可序列化类都显式声明
serialVersionUID
值,原因计算默认的
serialVersionUID
对类的详细信息具有较高的敏感性,根据编译器实现的不同可能千差万别,这样在反序列化过程中可能会导致意外的
InvalidClassException。因此,为保证
serialVersionUID
值跨不同
java
编译器实现的一致性,序列化类必须声明一个明确的
serialVersionUID
值。还强烈建议使用
private
修改器显示声明
serialVersionUID(如果可能),原因是这种声明仅应用于立即声明类
--
serialVersionUID
字段作为继承成员没有用处。
--------------------------
实现java.io.Serializable
接口的类是可序列化的。没有实现此接口的类将不能使它们的任一状态被序列化或逆序列化。
序列化类的所有子类本身都是可序列化的。这个序列化接口没有任何方法和域,仅用于标识序列化的语意。允许非序列化类的子类型序列化,子类型可以假定负责保存和恢复父类型的公有的、保护的和(如果可访问)包的域的状态。只要该类(即父类)有一个无参构造子,可初始化它的状态,那么子类型就可承担上述职责;如果该类没有无参构造函数,在这种情况下申明一个可序列化的类是一个错误。此错误将在运行时被检测。
例如:Integer实现了Serializable,所以可以把一个Integer的对象用IO写到文件里,之后再可以从文件里读出,如你开始写入的时候那个对象的intValue()
是5的话,那读出来之后也是5。这一点体现了用序化类的作用,即用来传送类的对象。
当一个JavaBean在构造工具内被用户化,并与其它Bean建立连接之后,它的所有状态都应当可被保存,下一次被load进构造工具内或在运行时,就应当是上一次修改完的信息。为了能做到这一点,要把Bean的某些字段的信息保存下来,在定义Bean时要使它实现Java.io.Serializable接口。例如:
public
class
Button
implements
Java.io.Serializable
{……}
实现了序列化接口的Bean中字段的信息将被自动保存。若不想保存某些字(这里的Bean中字段的信息将被自动保存是什么意思?这个自动保存是怎么实现的?)
段的信息则可在这些字段前冠以transient或static关键字,transient和static变量的信息是不可被保存的。通常,一个Bean所有公开出来的属性都应当是被保存的,也可有选择地保存内部状态。Bean开发者在修改软件时,可以添加字段,移走对其它类的引用,改变一个字段的private、protected或public状态,这些都不影响类的存储结构关系。然而,当从类中删除一个字段,改变一个变量在类体系中的位置,把某个字段改成transient/static,或原来是transient/static,现改为别的特性时,都将引起存储关系的变化。
所谓的Serializable,就是java提供的通用数据保存和读取的接口。至于从什么地方读出来和保存到哪里去都被隐藏在函数参数的背后了。这样子,任何类型只要实现了Serializable接口,就可以被保存到文件中,或者作为数据流通过网络发送到别的地方。也可以用管道来传输到系统的其他程序中。这样子极大的简化了类的设计。只要设计一个保存一个读取功能就能解决上面说得所有问题。

⑶ java serializable作为一个序列化的接口,为什么能当做数据类型来用…

为什么要做序列化,其实就是为了网络上传播。因为网上传播需要同一个类型,所以这样转。

⑷ java webService 返回对象类型如何序列化

实现 Serializable 接口

⑸ 关于java泛型的疑问 大神们帮帮忙啊

有2个方法重载:gson.fromjson(str, Person.class);
gson.fromJson(str, new TypeToken<List<Person>>(){}.getType());
第一个返回转换之后的实体,后者返回列表类型。
gson.<MyClass<T>> fromJson(result,(Type)new TypeToken<MyClass<T>>(){}.getType());这句不报错么?我咋觉得语法错的

⑹ java中bigdecimal怎么序列化

实现bigdecimal类型转成String类型:回 BigDecimal bd = new BigDecimal("xxx"); String str = bd.toString(); 扩展:答String类型转成bigdecimal类型 String str = "xxx"; BigDecimal bd = new BigDecimal(str);

⑺ java网络传递序列化对象抛类型转换异常怎么解决

get方法 就可以了啊 用Gson吧

⑻ java默认序列化如何去做,哪些字段不会被序列化

需要序列化的类实现 Serialization 接口,基本数据类型都会被实例化,其他类型默认不会实例化

⑼ java 可序列化类型都有哪些

json,xml,等

⑽ 关于java序列化多个不同类型对象的存取与读取万分感谢

readStreamHeader();
加入这个,重新读取文件头就好了

阅读全文

与java泛型序列化相关的资料

热点内容
纸质文件转换电子版 浏览:807
矩阵键盘扫描程序原理 浏览:986
怎么开发高级编程 浏览:530
政府的拆迁红头文件在哪里找 浏览:600
xp串口工具 浏览:469
反射javaforname区别 浏览:249
java添加计时器和图片 浏览:452
shell编辑文件内容 浏览:614
u盘驱动在哪个文件夹里 浏览:938
华为手机跟苹果手机怎么克隆app 浏览:172
cad文件为什么显示文件名是否正确 浏览:174
程序配置文件能自动转换成txt 浏览:985
r4烧录卡不同版本 浏览:962
怎么升级qq群为2000 浏览:347
微信己册除的文件怎样找回来 浏览:715
苹果美国账号共享2017 浏览:252
ps文件修改后打开还是原图 浏览:220
烧卡机苹果4微信qq哪里下载 浏览:780
ug120找不到指定文件 浏览:522
cda文件怎么转换成mp3格式 浏览:702

友情链接