代码之家  ›  专栏  ›  技术社区  ›  Yulin

方法在序列化后是否占用空间?

  •  0
  • Yulin  · 技术社区  · 8 年前

    我有一门课是这样的:

    class A{
        int a;
        int b;
        // a lot more properties...
    
        void methodA(){
           // very long method
        }
        void methodB(){
           // very long method
        }
        // a lot more methods...
    }
    

    有一次,我需要序列化这个类的实例,并通过网络将其发送到另一个节点。在另一个节点上,只需要属性,不需要方法。由于通过网络发送数据的成本很高,要实现轻量级,我是否应该创建另一个类似以下的中间类来剥离所有方法并发送该类的序列化实例?

    class A_{
        int a;
        int b;
        // copy all the properties in class A
    }
    
    3 回复  |  直到 8 年前
        1
  •  9
  •   Louis Wasserman    8 年前

    序列化实际上并不发送类的方法。不同数量的方法不会改变序列化的效果。

        2
  •  5
  •   Riaan Nel    8 年前

    不。方法定义属于该类,对于不同的对象(该类的实例)它们不会更改,因此将它们包含在序列化中没有意义。

    但是,每个对象的属性可能不同,因此它们是序列化的。

    因此,总之,无论您有零个方法还是二十个方法,每个方法有一百行,它都应该对序列化没有任何影响。

        3
  •  1
  •   user207421    8 年前

    否。方法不参与序列化。

    但是,如果出于某种原因,同一类的每一端都有不同的版本,则它们需要:

    • 同意 serialVersionUID
    • 按照对象序列化规范的对象版本章节中的定义,保持序列化兼容。

    总的来说,这不是一个好主意。