探索Java类,我意识到Date AtomicInteger,AtomicLong,BigDecimal,BigInteger,Byte,Double,Float,Integer,Long和Short等值类应该实现Serializable。
你能帮助我理解为什么所有这些类都应该实现标记接口Serializable吗?
答案 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