该Writable
接口仅适用于 Java 原语。
正确的。基本上,您需要将对象分解为可以序列化的对象序列。
因此,从第一个原则开始,要序列化列表,您需要序列化列表的大小,然后序列化列表的每个元素。这样,当您需要反序列化时,您就知道需要反序列化多少元素。
这样的事情应该让你写(双关语!)轨道:
class TweetStatusWritable implements Writable {
private String keywords;
private List<Status> tweets;
private long queryTime;
// add getters for the above three fields
public void readFields(DataInput in) {
this.keywords = in.readUTF();
int size = in.readInt();
this.tweets = new List<Status>();
for(int i = 0; i < size; i++) {
Status status = // deserialize an instance of Status
tweets.add(status);
}
this.queryTime = in.readLong();
}
public void write(DataOutput out) {
out.writeUTF(this.keywords);
out.writeInt(this.tweets.size());
for(int i = 0; i < this.tweets.size(); i++) {
// serialize tweets[i] onto out
}
out.writeLong(queryTime);
}
public TweetStatusWritable(
String keywords,
List<Status> tweets,
long queryTime
) {
this.keywords = keywords;
this.tweets = tweets;
this.queryTime = queryTime;
}
}