V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Vimax
V2EX  ›  Java

Java 对象什么时候应该实现序列化 Serializable 接口

  •  2
     
  •   Vimax · 2020-08-09 13:01:22 +08:00 · 4445 次点击
    这是一个创建于 1349 天前的主题,其中的信息可能已经有所发展或是发生改变。

    以下对象中,哪些应该要实现序列化。

    平时代码中不添加序列化为什么也没有问题?

    分层领域模型规约:

    • DO ( Data Object ):此对象与数据库表结构一一对应,通过 DAO 层向上传输数据源对象。

    • DTO ( Data Transfer Object ):数据传输对象,Service 或 Manager 向外传输的对象。

    • BO ( Business Object ):业务对象,可以由 Service 层输出的封装业务逻辑的对象。

    • Query:数据查询对象,各层接收上层的查询请求。注意超过 2 个参数的查询封装,禁止使用 Map 类 来传输。

    • VO ( View Object ):显示层对象,通常是 Web 向模板渲染引擎层传输的对象。

    14 条回复    2020-08-10 08:48:10 +08:00
    Kiske
        1
    Kiske  
       2020-08-09 13:04:45 +08:00
    需要反序列化的时候, They are like glasses: you’ll know when you need them.
    wdlth
        2
    wdlth  
       2020-08-09 13:10:28 +08:00
    因为在平时大多数情况不使用 Java 自己的序列化,一般是使用 JSON, hessian, kyro 等适用性更广或者更快的方法。
    optional
        3
    optional  
       2020-08-09 13:49:29 +08:00 via iPhone
    嗯,代码报错不得不序列化的时候。
    reeco
        4
    reeco  
       2020-08-09 13:52:10 +08:00 via Android   ❤️ 2
    这个对象需要网络传输的时候
    wujichao
        5
    wujichao  
       2020-08-09 14:03:06 +08:00
    使用的序列化框架强制需要你实现的 Serializable 协议的时候.
    aguesuka
        6
    aguesuka  
       2020-08-09 14:18:38 +08:00 via Android
    1.需要兼容老接口.2.或者不得不 hack 的时候(SerializableLambda).3.需要易于编写但是难以维护的序列化功能时
    chendy
        7
    chendy  
       2020-08-09 15:05:22 +08:00
    目前的项目应该可以直接忘掉这个接口了
    真的用不到
    kawowa
        8
    kawowa  
       2020-08-09 15:10:55 +08:00 via Android
    最简单的例子,你想存进 redis 的时候。
    cool4food
        9
    cool4food  
       2020-08-09 17:58:53 +08:00
    Java 自带的序列化接口只适用于 Java 进程之间的数据序列化 /反序列化,这就使得它的应用面比较窄,而且经过测试,Java 自带的 Serializable 性能也不好,所以目前基本上很少用
    huntcool001
        10
    huntcool001  
       2020-08-09 19:04:21 +08:00
    几乎什么时候都不需要.除非是兼容老的代码.

    需要保存或者传输的时候用 Json 或者其他方式, Protobuf 一类的.

    Java 自带的序列化机制很垃圾, Oracle 设计 Java 语言的 chief architect 自己都说

    Mark Reinhold, shared his thoughts about Java’s serialization mechanism which he called a “horrible mistake” and a virtually endless source of security vulnerabilities

    https://adtmag.com/articles/2018/05/30/java-serialization.aspx

    而且以后会从 Java 语言里移除的.
    mio4
        11
    mio4  
       2020-08-09 19:35:28 +08:00
    很简单,dubbo rpc 调用的时候
    mightofcode
        12
    mightofcode  
       2020-08-09 19:50:10 +08:00
    永远不要用
    webshe11
        13
    webshe11  
       2020-08-09 21:08:58 +08:00
    需要制造反序列化漏洞的时候
    lxk11153
        14
    lxk11153  
       2020-08-10 08:48:10 +08:00
    @mio4 #11 dubbo 和你指定哪种序列化框架有关,默认好像是要的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2815 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 11:38 · PVG 19:38 · LAX 04:38 · JFK 07:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.