部分反序列化一个复杂的 java 对象

Partially Deserializing a complex java object

我有一个 java class 层次结构,如下所示。

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

我已经序列化了 List<Results> resultList,考虑这个列表包含 100 个项目,每个 _resultSet 有超过 1000 条记录。我有 2 个问题,

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

如果我的理解有误,请指正。

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

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

如果你实施 Externalizable,你的 readExternal 看起来有点像:

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