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

Kyl*_*yle 13 java reflection serialization

我要序列化的第三方库中有一个特定的类.我该怎么做呢?

我假设我必须编写一个方法来接受类的对象并使用反射来获取私有成员值.然后,为了反序列化,我会使用反射来放回值.

这会有用吗?有没有更简单的方法?

fas*_*seg 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);
}
Run Code Online (Sandbox Code Playgroud)

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

或者,如果第三方类不是最终的,你可以只扩展它,让它实现Serializable并编写自己的writeObject和readObject方法.

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

序列化秘密