网易首页 > 网易号 > 正文 申请入驻

Android开发必备技能:数据序列化全解析

0
分享至

在Android开发中,数据序列化是绕不开的“关卡”。它就像数据的“变形记”,能让对象在内存、磁盘和网络间自由穿梭。但面对琳琅满目的序列化方案,开发者常常陷入选择困难。今天,我们就来一场“序列化大揭秘”,帮你找到最适合的方案!

一、什么是数据序列化?

简单来说,序列化就是把对象“打包”成字节流,方便存储或传输;反序列化则是把字节流“拆包”还原成对象。比如:

  • 持久化存储:保存用户设置到本地文件。

  • 网络传输:把用户数据发送给服务器。

  • 进程间通信:在Activity间传递复杂对象。

二、Android序列化“六大法宝” + 代码示例1. Serializable(Java原生方案)
  • 优点:实现超简单,只需声明接口,适合新手。

  • 缺点:性能差、易触发GC,就像“龟速快递”。

  • 适用场景:简单对象持久化,如缓存小文件。

// 实现Serializable接口
public class User implements Serializable {
    private String name;
    private int age;
    // 构造方法、getter/setter省略
}

// 序列化:保存到文件
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("user.dat"));
oos.writeObject(user);
oos.close();

// 反序列化:从文件读取
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("user.dat"));
User user = (User) ois.readObject();
ois.close();
2. Parcelable(Android专属利器)
  • 优点:性能王者!内存操作无反射,适合高频传输。

  • 缺点:代码模板多,像“拼图游戏”有点麻烦。

  • 适用场景:Activity/Fragment传参,列表数据滑动。

public class User implements Parcelable {
    private String name;
    private int age;

    // 必须实现的CREATOR
    public static final Creator CREATOR =  new Creator () { 
        @Override
        public User createFromParcel(Parcel in) {
            return new User(in);
        }

        @Override
        public User[] newArray(int size) {
            return new User[size];
        }
    };

    // 从Parcel读取数据
    private User(Parcel in) {
        name = in.readString();
        age = in.readInt();
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeInt(age);
    }

    @Override
    public int describeContents() {
        return 0;
    }
}

// 使用Intent传递Parcelable对象
Intent intent = new Intent(this, TargetActivity.class);
intent.putExtra("user", user);
startActivity(intent);
3. JSON序列化(Gson库示例)
  • 优点:可读性强,像“国际通用语言”一样方便。

  • 缺点:解析慢、占内存,大对象处理需谨慎。

  • 适用场景:网络API交互,跨平台数据交换。

// 添加Gson依赖:implementation 'com.google.code.gson:gson:2.8.9'

public class User {
    private String name;
    private int age;
    // 构造方法、getter/setter省略
}

// 序列化:对象转JSON字符串
Gson gson = new Gson();
String json = gson.toJson(user);

// 反序列化:JSON字符串转对象
User user = gson.fromJson(json, User.class);
4. FlatBuffers(性能怪兽)
  • 优点:直接操作二进制,速度快到“飞起”!

  • 缺点:学习成本高,像“外星科技”需要适应。

  • 适用场景:游戏状态同步、高频数据交换。

// 1. 定义schema(user.fbs)
// table User {
//   name:string;
//   age:int;
// }
// root_type User;

// 2. 生成Java类(使用flatc编译器)

// 3. 序列化/反序列化
FlatBufferBuilder builder = new FlatBufferBuilder(1024);
int nameOffset = builder.createString("Alice");
User.startUser(builder);
User.addName(builder, nameOffset);
User.addAge(builder, 30);
int userOffset = User.endUser(builder);
builder.finish(userOffset);

// 获取序列化后的字节数组
byte[] data = builder.sizedByteArray();

// 反序列化
ByteBuffer buffer = ByteBuffer.wrap(data);
User user = User.getRootAsUser(buffer);
String name = user.name();
int age = user.age();
三、如何选择?看场景!
  • 内存传输(如Intent传参)→Parcelable

  • 持久化存储(如配置文件)→SerializableJSON

  • 网络交互(如API请求)→JSON

  • 高性能场景(如游戏)→FlatBuffers

  • 结构化数据(如用户表)→SQLite/Room

四、实战案例:混合使用更灵活

比如,在电商APP中:

  1. 商品列表Parcelable快速滑动加载。

  2. 用户订单存到SQLite数据库。

  3. 支付信息JSON加密传输到服务器。

  4. 游戏道具FlatBuffers实现实时同步。

总结

没有“银弹”,只有最合适的方案。理解每种序列化的优缺点,结合项目需求灵活选择,才能让数据“活”起来,让APP更高效!

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
24小时内,俄伊各出一个大消息!特朗普再不找中国,就来不及了!

24小时内,俄伊各出一个大消息!特朗普再不找中国,就来不及了!

史料布籍
2026-07-04 15:50:19
脑筋一转结果拉了坨大的,网友:怎么也想不明白鸡怎么只有两条腿

脑筋一转结果拉了坨大的,网友:怎么也想不明白鸡怎么只有两条腿

兰妮搞笑分享
2026-07-02 14:55:40
香港政府发文,43岁徐子淇再破"天花板",让香港阔太圈沉默了

香港政府发文,43岁徐子淇再破"天花板",让香港阔太圈沉默了

论事的老枢
2026-07-04 07:25:25
美英法德对大陆海警船赴台湾岛以东海域开展执法巡查表达所谓“关切”,国台办驳斥

美英法德对大陆海警船赴台湾岛以东海域开展执法巡查表达所谓“关切”,国台办驳斥

环球网资讯
2026-07-02 10:55:38
NBA球员总薪资榜单!!前十出炉!

NBA球员总薪资榜单!!前十出炉!

柚子说球
2026-07-05 07:34:52
是怎么发现家里那位又“恋爱”了?网友:有一天串台了,叫我丫头

是怎么发现家里那位又“恋爱”了?网友:有一天串台了,叫我丫头

另子维爱读史
2026-07-03 20:19:49
哈里王子独自回英,想去母亲戴安娜墓地,妻儿安保却遭王室拒绝

哈里王子独自回英,想去母亲戴安娜墓地,妻儿安保却遭王室拒绝

译言
2026-07-05 09:31:38
3年半老鼠仓赚了7.5万,准百亿基金经理的亏本买卖:罚没42万

3年半老鼠仓赚了7.5万,准百亿基金经理的亏本买卖:罚没42万

财联社
2026-07-04 16:56:04
巴西能否冲破欧洲魔咒?英格兰复仇地狱球场?世界杯1/8决赛前瞻

巴西能否冲破欧洲魔咒?英格兰复仇地狱球场?世界杯1/8决赛前瞻

世界BALL
2026-07-05 07:45:20
黄鳝主要吃什么长大,最大能长多大?为何说抓到三斤大黄鳝吃不得

黄鳝主要吃什么长大,最大能长多大?为何说抓到三斤大黄鳝吃不得

农夫也疯狂
2026-07-02 15:22:13
14球对70球,15球对19球!大罗彻底沦为笑话,被姆巴佩全面碾压!

14球对70球,15球对19球!大罗彻底沦为笑话,被姆巴佩全面碾压!

陌识
2026-07-05 07:18:08
记者丨莱奥6000-7000万,福法纳2000-2500万

记者丨莱奥6000-7000万,福法纳2000-2500万

米兰圈
2026-07-05 09:36:28
西媒:维尼修斯训练迟到,队友掌声嘘声齐送

西媒:维尼修斯训练迟到,队友掌声嘘声齐送

懂球帝
2026-07-05 00:38:14
中国包裹暴跌50%!欧盟3欧“反羊毛税”开征,Temu、Shein在希腊被踩刹车

中国包裹暴跌50%!欧盟3欧“反羊毛税”开征,Temu、Shein在希腊被踩刹车

以希腊之名
2026-07-03 16:59:52
两性心理学:中年男人爱到深处,不是每天联系,而是给你这些“底牌”

两性心理学:中年男人爱到深处,不是每天联系,而是给你这些“底牌”

心理观察局
2026-07-05 09:18:13
爱情岛新主持回应争议:不惧分享观点,致力人性化岛民

爱情岛新主持回应争议:不惧分享观点,致力人性化岛民

追星雷达站
2026-07-03 01:11:57
联盟多位高管:火箭队将在杜兰特合同到期前交易他,活塞队将追求

联盟多位高管:火箭队将在杜兰特合同到期前交易他,活塞队将追求

好火子
2026-07-04 23:59:32
随着法国1-0巴拉圭,摩洛哥3-0加拿大,世界杯首场8强战+时间确定

随着法国1-0巴拉圭,摩洛哥3-0加拿大,世界杯首场8强战+时间确定

球场没跑道
2026-07-05 07:08:21
为了赚8800泰铢,一名泰航空姐的人生,在机场X光机前彻底改变

为了赚8800泰铢,一名泰航空姐的人生,在机场X光机前彻底改变

曼谷陈大叔
2026-07-02 03:40:50
他从朝鲜回来无职务,授衔时得知自己是海南军区司令,怀疑听错了

他从朝鲜回来无职务,授衔时得知自己是海南军区司令,怀疑听错了

史之韵
2026-06-14 00:48:49
2026-07-05 10:15:00
君伟说
君伟说
分享职场故事
460文章数 48关注度
往期回顾 全部

科技要闻

年费7.5万美元,美国富裕家庭把孩子送进AI学校

头条要闻

姆巴佩被巴拉圭队球员出拳击倒 进球后用不屑表情回应

头条要闻

姆巴佩被巴拉圭队球员出拳击倒 进球后用不屑表情回应

体育要闻

揭法国锋线最大优势 有人比姆巴佩还快?

娱乐要闻

王力宏成都舞台受伤 仍然坚持三小时

财经要闻

揭秘跨境“对敲”换汇黑产

汽车要闻

方程豹钛9内饰曝光 用上了长联屏设计/下半年上市

态度原创

本地
房产
游戏
亲子
军事航空

本地新闻

国内足球之旅?这座小城给你高分答案

房产要闻

总裁空缺17个月、现金缺口超1000亿:金融局“局外人”入局万科

玩家"反了"!大批退款GTA6/ps会员:别再装睡

亲子要闻

欢迎周洲阿姨来我家!

军事要闻

普京宣布俄军“完全解放”卢甘斯克

无障碍浏览 进入关怀版