ブール値は、オブジェクトプロパティに。としてフラグを立てるための標準的な手順ですNULL
。
この場合を考えてみましょう:
public class LongMessage implements Writable {
private long tag;
private String data;
// interface methods omitted first
}
理由は何であれ、そう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);
}
}
それもかなり読みやすいです。ただし、次のJavaDocsに記載されているように、レコードごとに1バイトの一定のオーバーヘッドがあることに注意してください#writeBoolean
。
この出力ストリームにブール値を書き込みます。引数vが真の場合、値(byte)1が書き込まれます。vがfalseの場合、値(byte)0が書き込まれます