부울은 객체 propertys를 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);
}
}
매우 읽기 쉽습니다.
이 출력 스트림에 부울 값을 씁니다 :하지만 #writeBoolean
의 JavaDoc을에 명시된대로 레코드 당 1 바이트 정수 오버 헤드가 있습니다. 인수 v가 이면 true (1) 값이 기록됩니다. v가 false 인 경우, 값 (byte) 0 가 기입된다.
* null * 그대로 쓰려고 노력 했는가? 재정의 한 * write * 메서드를 공유 할 수 있습니까? – Amar
null 값을 사용하여 X를 구성하고 직렬화하고 역 직렬화 한 다음, 값이 예상 한 값인지 확인하는 테스트를 작성하십시오. 그게 작동한다면 그것은 hadoop 하에서 작동해야합니다. –