序列化存储是将对象的状态信息转换为可以存储或传输的形式的过程。在Android开发中,通常用于在Activity之间传递数据。序列化的对象可以被写入磁盘或者通过网络将它们发送到任何其他Android设备。
具体操作步骤:
- 创建实现Serializable的类:
public class ScoreList implements Serializable
-
Serialize对象:使用ObjectOutputStream。常见的做法是创建一个FileOutputStream,并将它作为ObjectOutputStream的构造函数参数。使用ObjectOutputStream.writeObject()方法将对象写入流。
示例:
FileOutputStream fos = context.openFileOutput(fileName, Context.MODE_PRIVATE); ObjectOutputStream os = new ObjectOutputStream(fos); os.writeObject(scoreList); os.close(); fos.close();
-
Deserialize对象:使用ObjectInputStream。常见做法是创建一个ObjectInputStream,并将其作为FileInputStream的构造参数。然后使用ObjectInputStream.readObject()方法读取对象。
示例:
FileInputStream fis = context.openFileInput(fileName); ObjectInputStream is = new ObjectInputStream(fis); ScoreList simpleClass = (ScoreList) is.readObject(); is.close(); fis.close();
注意:
- 非所有的对象都可以序列化。只有实现了Serializable接口的类的对象才能被序列化。Serializable接口实际上是个标识接口,由编译器处理,它不需要包含任何方法。
- 对象的序列化并不安全,被序列化的对象可能被其他人恶意使用。因此,如果您的对象包含敏感信息,如用户密码,序列中应该有相应的处理方法,以防止这些信息被恶意使用。
- 在使用序列化时要注意版本控制。当一个类实现了Serializable接口后,就可以在这个类中添加一个名为serialVersionUID(序列版本ID)的字段,用以提供版本控制的功能。如果没有显示声明这个字段,Java运行时环境将对类进行一次SHA算法操作,以生成一个独特的ID。这个过程是根据编译的class的各种元素来生成的,只要class改变了,这个生成的ID可能就会有所不同。这样,如果你序列化了一个对象,而在对它反序列化时,class的版本变了,那就无法反序列化了。
发布者:luotuoemo,转转请注明出处:https://www.jintuiyun.com/169964.html