我正在使用Hadoop 0.20.2.我正在写一个X实现的对象Writable.
X有几个字段是实例Integer.对于这些字段,该null值具有特殊意义.
序列化对象时,通过写入接口DataOutput out的write方法Writable,有没有办法可以编写null?或者我应该使用单独的布尔值,表明该值为空?
布尔值是将对象属性标记为的标准过程NULL.
考虑这种情况:
public class LongMessage implements Writable {
private long tag;
private String data;
// interface methods omitted first
}
Run Code Online (Sandbox Code Playgroud)
所以data可能是null,无论出于何种原因.所以我会实现读/写如下:
@Override
public void readFields(DataInput in) throws IOException {
tag = in.readLong();
if (in.readBoolean()) {
data = in.readUTF();
} else {
data = null;
}
}
@Override
public void write(DataOutput out) throws IOException {
out.writeLong(tag);
if (data != null) {
out.writeBoolean(true);
out.writeUTF(data);
} else {
out.writeBoolean(false);
}
}
Run Code Online (Sandbox Code Playgroud)
它甚至非常易读.但请注意,每个记录有一个字节的持续开销,如JavaDocs中所述#writeBoolean:
将布尔值写入此输出流.如果参数v为真,则写入值(字节)1; 如果v为假,则写入值(字节)0
| 归档时间: |
|
| 查看次数: |
2514 次 |
| 最近记录: |