if (version == 3) {
int fieldCount = dataFile.readInt();
for (int i = 0; i < fieldCount; i++) {
int typeId = dataFile.readInt();
ProgramFieldType type = ProgramFieldType.getTypeForId(typeId);
if (type.getFormat() == ProgramFieldType.UNKNOWN_FORMAT) {
return null;
} else if (type.getFormat() == ProgramFieldType.BINARY_FORMAT) {
long position = dataFile.getFilePointer();
int n = dataFile.readInt();
byte[] value = new byte[n];
dataFile.readFully(value);
if ((value != null) && (n >= LARGE_FIELD_SIZE_LIMIT)) {
prog.setLargeField(type, position);
} else {
prog.setBinaryField(type, value);
}
} else if (type.getFormat() == ProgramFieldType.TEXT_FORMAT) {
long position = dataFile.getFilePointer();
String value = dataFile.readUTF();
if (value != null) {
if (value.length() >= LARGE_FIELD_SIZE_LIMIT) {
prog.setLargeField(type, position);
}
else {
if (value.length() > 0) {
prog.setTextField(type, value);
}
}
}
} else if (type.getFormat() == ProgramFieldType.INT_FORMAT) {
prog.setIntField(type, dataFile.readInt());
} else if (type.getFormat() == ProgramFieldType.TIME_FORMAT) {
prog.setTimeField(type, dataFile.readInt());
}
}
}