在研究Java类时,我意识到诸如Date AtomicInteger,AtomicLong,BigDecimal,BigInteger,Byte,Double,Float,Integer,Long和Short的值类应实现Serializable。
您能否帮助我理解为什么所有这些类都应实现标记接口Serializable?
最佳答案
Java提供了一种称为对象序列化的机制,其中对象
可以表示为包含对象的字节序列
数据以及有关对象类型和类型的信息
数据存储在对象中。
添加Serializable
标记它们具有完全描述的功能。
序列化的使用示例:
可序列化性允许您将类流式传输到文件中,然后从文件中再次读取它。
类ObjectInputStream和ObjectOutputStream是高级的
包含用于序列化和反序列化方法的流
目的。
public final void writeObject(Object x) throws IOException
public final Object readObject() throws IOException, ClassNotFoundException
这些方法使您可以序列化和反序列化标记为可序列化的类。
附加信息:
正如@Basil Bourque所提到的-当您阅读有关a.e的文档时。 BigInteger您会发现:
static BigInteger ONE //The BigInteger constant one.
static BigInteger TEN // The BigInteger constant ten.
static BigInteger ZERO //The BigInteger constant zero.
来源:JavaDocs
与Integer相比,BigInteger不是单个primitve对象。而是由几个对象组成。它们在一起的行为就像原始的Integer。除非序列化程序遇到此对象,否则它不知道该类是否可序列化(没有真正的原始类型)。您可以通过添加
implements Serialiable
将类手动标记为Serializable来处理。关于java - 为什么诸如Date,BigInteger,Double之类的值类应实现Serializable?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32369948/