部分反序列化一个复杂的 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 个问题,
- 当我们反序列化这个对象时,我的应用程序内存将容纳整个对象,它会产生堆大小问题吗?
- 如果它会造成资源问题,当我反序列化时,我可以忽略
_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();
}
}
我有一个 java class 层次结构,如下所示。
public class Results{
private String _query;
private CachedRowSetImpl _resultSet;
//... getter setters
}
我已经序列化了 List<Results> resultList
,考虑这个列表包含 100 个项目,每个 _resultSet 有超过 1000 条记录。我有 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();
}
}