java-android-为什么在存储到文件之前进行序列化? 背景:

java-android-为什么在存储到文件之前进行序列化? 背景:,java,android,file,serialization,storage,Java,Android,File,Serialization,Storage,我想将一个对象存储到一个文件中 我知道每个物体的大小,也知道物体的整体大小。 不涉及网络:只涉及本地存储读/写 在C语言中,出于性能原因,我这样存储我的结构(同样,只是本地数据,不,它不会咬人:我控制大小,显然不涉及指针) 问题: 每个人都希望我先连载。所有的芭蕾舞曲都先连载 “因为它是那样做的”->性能成功 为什么不考虑将整个对象存储在文件中,然后在java中获取它(隐藏指针?)可以设想以您自己的方式将整个对象存储在文件java中 每个人都建议您进行序列化,因为Java中有一种内置的机制,它可

我想将一个对象存储到一个文件中

我知道每个物体的大小,也知道物体的整体大小。 不涉及网络:只涉及本地存储读/写

在C语言中,出于性能原因,我这样存储我的结构(同样,只是本地数据,不,它不会咬人:我控制大小,显然不涉及指针)

问题: 每个人都希望我先连载。所有的芭蕾舞曲都先连载

“因为它是那样做的”->性能成功


为什么不考虑将整个对象存储在文件中,然后在java中获取它(隐藏指针?)

可以设想以您自己的方式将整个对象存储在文件java中

每个人都建议您进行序列化,因为Java中有一种内置的机制,它可以做到这一点:将对象的内容保存到文件中

因此,您不必编写自己的代码,只需将
implements Serializable
添加到类定义中,就可以使用简单的

try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("your file")) {
    out.writeObject(yourObject);
}
如果您想自己实现它,您可以,但当然这需要3行以上的代码,您需要测试它并修复bug。一旦你改变了你的对象定义,你需要修正你的书写和阅读方法

因此,这非常方便,因为Java序列化也可以处理许多“困难情况”(例如对象图中的循环)

通常,您会以序列化作为基本机制,然后可以进一步优化。例如,您对输出文件的大小不满意(对于简单的数据结构来说,序列化是“通用”的方法有很多开销)。您可以自己处理序列化过程的一部分,使其更加优化

例如,您可以实现
Externalizable
而不是
Serializable
,并实现:

public void writeExternal(ObjectOutput out)
public void readExternal(ObjectInput in)
在这些方法中,将整个对象内容编码/解码为一个字符串,并使用一些字段分隔符

您还可以将对象存储为xml,方法是将
@XmlRootElement
放在类的顶部并使用JAXB(同样,整个保存过程需要3行代码)

还有JSON图书馆


简单地说,使用内置机制比编写自己的机制更简单、更安全,这些机制经过测试可以正常工作

我还没有足够的声誉点数来添加评论,但是,我想继续使用齐鲁的回答,如下所示:

如果您想减少默认编组/解编组对性能的影响,Java确实提供了另一种机制,您可以手动持久化对象。但是,这肯定需要你多做一点簿记

为此,请实现
Externalizable
,而不是
Serializable
。这将迫使您实现另外两种方法:

public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException;
public void writeExternal(ObjectOutput out) throws IOException;
Serializable
性能与
Externalizable
性能的良好比较。这是一篇很好的介绍如何开始实现
Externalizable


您还可以使用
RandomAccessFile
类在更精细的级别上工作,该类可能更接近C风格,因为它涉及根据对象中元素的字节大小跟踪文件指针。你可以很容易地在网上找到该类用法的示例。

什么是“因为那样做”->性能命中。“应该是什么意思?你的问题是什么?明白了!谢谢我喜欢writeObject的东西。会用它的!ByeThanks gman!这是一个很好的补充!+1