为什么像Date,BigInteger,Double这样的值类应该实现Serializable?

时间:2015-09-03 07:53:12

标签: java serialization

探索Java类,我意识到Date AtomicInteger,AtomicLong,BigDecimal,BigInteger,Byte,Double,Float,Integer,Long和Short等值类应该实现Serializable。

你能帮助我理解为什么所有这些类都应该实现标记接口Serializable吗?

2 个答案:

答案 0 :(得分:4)

  

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不是单一的原始对象。它由几个对象组成。它们一起表现得像一个原始的整数。除非序列化程序遇到此对象,否则它不知道该类是否可序列化(没有真正的原始类型)。您可以通过添加implements Serialiable手动将类标记为Serializable来处理。

答案 1 :(得分:2)

这些是基本的和最常用的数据类型,应该列入白名单以传输/保存数据。并且程序员无权修改它们,默认情况下它们是可选择的。

不仅这些还有许多其他类默认可序列化。例如:ArrayList

详细了解Serializable Objects