android 对象内部序列化

在Android开发中,对象序列化通常指的是将一个对象的状态转换为字节流,以便它可以被存储(例如,在文件或数据库中)或通过网络发送。反序列化则是将这些字节流恢复回原始对象状态的过程。

Java提供了两种主要的序列化机制:通过实现java.io.Serializable接口或使用java.io.Externalizable接口。在Android中,你通常会使用Serializable接口,因为它更简单并且适用于大多数情况。

使用Serializable接口进行序列化

  1. 实现Serializable接口
    要使一个类可序列化,只需实现Serializable接口。这个接口是一个标记接口,没有需要实现的方法。
public class MyData implements Serializable {  
    private String name;  
    private int age;  
  
    // 构造器、getter和setter方法  
  
    // Serializable接口不需要实现任何方法  
}
  1. 序列化对象
    使用ObjectOutputStream将对象写入输出流(如文件输出流)。
try (FileOutputStream fos = openFileOutput("my_data.dat", Context.MODE_PRIVATE);  
     ObjectOutputStream oos = new ObjectOutputStream(fos)) {  
    MyData data = new MyData();  
    data.setName("John Doe");  
    data.setAge(30);  
    oos.writeObject(data);  
} catch (IOException e) {  
    e.printStackTrace();  
}
  1. 反序列化对象
    使用ObjectInputStream从输入流(如文件输入流)中读取对象。

MyData data = null;  
try (FileInputStream fis = openFileInput("my_data.dat");  
     ObjectInputStream ois = new ObjectInputStream(fis)) {  
    data = (MyData) ois.readObject();  
} catch (IOException | ClassNotFoundException e) {  
    e.printStackTrace();  
}  
  
// 现在你可以使用data对象了

注意事项

  • 序列化过程中,对象的所有非瞬态(即没有用transient关键字标记的)和非静态字段都将被序列化。
  • 如果一个对象包含对其他对象的引用,那么这些对象也会被序列化(除非它们被标记为transient或实现了某种特定的序列化机制,如Externalizable)。
  • 序列化和反序列化可能会抛出IOException(在读写过程中)和ClassNotFoundException(在反序列化过程中找不到类的定义)。
  • 序列化和反序列化可能会消耗较多的资源和时间,因此不应在性能敏感的操作中频繁使用。
  • 序列化后的数据通常与Java版本和平台相关,因此,在一个平台上序列化的对象可能无法在另一个平台上反序列化(除非两个平台具有相同的Java版本和库)。
  • 对于安全性敏感的数据,不应使用Java序列化,因为它容易受到攻击。相反,应使用更安全、更可控的序列化机制,如JSON、XML或Protocol Buffers。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值