当前位置: 首页 > 面试题库 >

在Java中,我如何序列化未标记为Serializable的类?

颜文昌
2023-03-14
问题内容

我要序列化第三方库中的特定类。我将如何去做呢?

我假设我将不得不编写一个方法,该方法接受类的对象并使用反射来获取私有成员值。然后对于反序列化,我将使用反射将值放回去。

这行得通吗?有更容易的方法吗?


问题答案:

您可以只使用实现Serializable且与第三方对象具有相同字段的传输对象。让传输对象实现一个方法,该方法返回原始第三方类的对象,您已完成:

伪代码:

class ThirdParty{

    int field1;
    int field2;
}

class Transfer implements Serializable{

    int field1;
    int field2;

    /* Constructor takes the third party object as 
       an argument for copying the field values.
       For private fields without getters 
       use reflection to get the values */
    Transfer (ThirdParty orig){
       this.field1=orig.field1;
       this.field2=orig.field2;
    }

    ThirdParty getAsThirdParty(){
        ThirdParty copy=new ThirdParty();
        copy.field1=this.field1;
        copy.field2=this.field2;
        return copy;
    }

    /* override these methods for custom serialization */
    void writeObject(OutputStream sink);
    void readObject(InputStream src);
}

如果您有任何特殊的成员对象,只需确保成员正确序列化即可。

或者,如果第三方类不是最终类,则可以对其进行扩展,使其实现Serializable并编写自己的writeObject和readObject方法。

在此处查看一些序列化信息:

序列化的秘密



 类似资料:
  • 我在使用 PySpark 的保存文件() 时遇到错误,并且在使用保存文件() 时收到相同的错误。我需要保存(键,值)的RDD,其中键是字符串,而值是标记点RDD(标签,稀疏向量)。错误如下所示。谷歌搜索几个来源,似乎我应该能够在IPython笔记本中做到这一点。我需要序列化这个大型RDD,以便我可以在Java中处理它,因为Spark的一些MLLib功能还不适用于python。根据这篇文章,这应该是

  • 本文向大家介绍解析Android中的Serializable序列化,包括了解析Android中的Serializable序列化的使用技巧和注意事项,需要的朋友参考一下 1、为何要序列化? -- 把内存中的java对象能够在磁盘上持久保存 -- 通过网络传输对象 -- 通过RMI(Remote Method Invocation 远程过程调用)传输。 通过序列化可以把对象转化为与平台无关的二进制流,

  • 问题内容: 如何序列化未实现Serializable的对象?我不能将其标记为Serializable,因为该类来自第3方库。 问题答案: 您不能序列化未实现的类,但可以将其包装在可以实现的类中。为此,您应该在包装器类上实现和,以便可以以自定义方式序列化其对象。 首先,使您的非序列化字段。 在中,首先调用流以存储所有非瞬态字段,然后调用其他方法来序列化不可序列化对象的各个属性。 在中,首先调用流以读

  • 问题内容: 我想深入克隆一个列表。为此,我们有一种方法 所以现在要克隆我的列表,我应该先将其转换为可序列化的。是否可以将列表转换为可序列化列表? 问题答案: 已实施的所有标准实施。 因此,即使它本身不是的子类型,也可以安全地将列表强制转换为,只要您知道它是诸如或的标准实现之一。 如果不确定,请先复制列表(使用),然后知道它是可序列化的。

  • 我有一个kdtree,其节点由以下字段组成:公共静态类节点实现可序列化{ 其中DataPoint定义: 公共静态类DataPoint实现可序列化{公共可比X;公共可比Y;公共可比Z; 我想序列化树,存储在文件中并在回答范围查询时反序列化。我对这个概念od序列化的理解并不好。从我收集的任何内容中,我编写了以下函数,但不起作用。有人能帮忙吗?

  • 本文向大家介绍JAVA序列化Serializable及Externalizable区别详解,包括了JAVA序列化Serializable及Externalizable区别详解的使用技巧和注意事项,需要的朋友参考一下 序列化简介 Java 的对象序列化将那些实现 Serializable 接口的对象转换成一个字节序列,并能在之后将这个字节序列完全恢复为原来的对象。 这就意味着 Java 对象在网络上