在进程或页面通信时需要使用Intent传递数据; 在对象持久化时需要存储数据. 对于复杂的对象, 进行序列化才可传递或存储, 可以使用Java的Serializable
方式或Android的Parcelable
方式. 本文介绍Serializable和Parcelable的使用方式, 含有Demo.
欢迎Follow我的GitHub: https://github.com/SpikeKing
本文源码的GitHub下载地址
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public class UserSerializable implements Serializable { // 标准序列ID, 用于判断版本 private static final long serialVersionUID = 1L; public int userId; public String userName; public boolean isMale; public UserSerializable(int userId, String userName, boolean isMale) { this.userId = userId; this.userName = userName; this.isMale = isMale; } } |
序列化对象, 使用ObjectOutputStream
存储已经序列化的对象数据, 通过writeObject
写入对象.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public void serialIn(View view) { Context context = view.getContext(); File cache = new File(context.getCacheDir(), "cache.txt"); try { ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(cache)); UserSerializable user = new UserSerializable(0, "Spike", false); out.writeObject(user); out.close(); Toast.makeText(context, "序列化成功", Toast.LENGTH_SHORT).show(); } catch (IOException e) { e.printStackTrace(); } } |
缓存文件位置:
new File(context.getCacheDir(), "cache.txt")
.
反序列对象, 使用ObjectInputStream
反序列化对象, 通过readObject
读取对象的持久化信息.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
public void serialOut(View view) { Context context = view.getContext(); File cache = new File(context.getCacheDir(), "cache.txt"); UserSerializable newUser = null; try { ObjectInputStream in = new ObjectInputStream(new FileInputStream(cache)); newUser = (UserSerializable) in.readObject(); in.close(); } catch (Exception e) { e.printStackTrace(); Toast.makeText(context, "请先序列化", Toast.LENGTH_SHORT).show(); } if (newUser != null) { String content = "序号: " + newUser.userId + ", 姓名: " + newUser.userName + ", 性别: " + (newUser.isMale ? "男" : "女"); mSerialTvContent.setText(content); } else { ble方式或 Android的Parcelable 方式. 本文介绍Serializable和Parcelable的使用方式, 含有Demo.
本文源码的GitHub下载地址
序列化对象, 使用
反序列对象, 使用
|