部分反序列化复杂的Java对象

时间:2015-04-17 06:36:07

标签: java serialization

我有一个java类层次结构如下。

public class Results{
    private String _query;
    private CachedRowSetImpl _resultSet;
    //... getter setters
}

我序列化List<Results> resultList,认为此列表包含100个项目,每个_resultSet包含超过1000条记录。我有2个问题,

  1. 当我们反序列化这个对象时,我的应用程序内存将保存整个对象,是否会产生堆大小问题?
  2. 如果它会造成资源问题,当我反序列化时,我可以忽略被反序列化的_resultSet意味着只是查询就足够了吗?
  3. 如果我的理解是错误的,请纠正我。

2 个答案:

答案 0 :(得分:1)

如果您实施Externalizable,您的readExternal看起来会像:

     public void readExternal(ObjectInput in) throws IOException,  
         ClassNotFoundException {  
             _query=(String) in.readObject();  
            if(//yourCondition){
             _resultSet=(CachedRowSetImpl) in.readObject();  
            }
         }

答案 1 :(得分:0)

您应该实现Serializable。 修饰符&#34; transient&#34;可用于在序列化期间忽略字段。 我不知道CachedRowSetImpl中包含什么,但是当你忽略它时,只有100个String对象不会导致堆问题。

public class Results implements Serializable{
    private String _query;
    private transient CachedRowSetImpl _resultSet;
    //... getter setters
}