in parquet-format-structures/src/main/java/org/apache/parquet/format/Util.java [289:365]
public static void readFileMetaData(
final InputStream input,
final FileMetaDataConsumer consumer,
boolean skipRowGroups,
BlockCipher.Decryptor decryptor,
byte[] AAD)
throws IOException {
try {
DelegatingFieldConsumer eventConsumer = fieldConsumer()
.onField(VERSION, new I32Consumer() {
@Override
public void consume(int value) {
consumer.setVersion(value);
}
})
.onField(SCHEMA, listOf(SchemaElement.class, new Consumer<List<SchemaElement>>() {
@Override
public void consume(List<SchemaElement> schema) {
consumer.setSchema(schema);
}
}))
.onField(NUM_ROWS, new I64Consumer() {
@Override
public void consume(long value) {
consumer.setNumRows(value);
}
})
.onField(KEY_VALUE_METADATA, listElementsOf(struct(KeyValue.class, new Consumer<KeyValue>() {
@Override
public void consume(KeyValue kv) {
consumer.addKeyValueMetaData(kv);
}
})))
.onField(CREATED_BY, new StringConsumer() {
@Override
public void consume(String value) {
consumer.setCreatedBy(value);
}
})
.onField(
ENCRYPTION_ALGORITHM,
struct(EncryptionAlgorithm.class, new Consumer<EncryptionAlgorithm>() {
@Override
public void consume(EncryptionAlgorithm encryptionAlgorithm) {
consumer.setEncryptionAlgorithm(encryptionAlgorithm);
}
}))
.onField(FOOTER_SIGNING_KEY_METADATA, new StringConsumer() {
@Override
public void consume(String value) {
byte[] keyMetadata = value.getBytes(StandardCharsets.UTF_8);
consumer.setFooterSigningKeyMetadata(keyMetadata);
}
});
if (!skipRowGroups) {
eventConsumer = eventConsumer.onField(
ROW_GROUPS, listElementsOf(struct(RowGroup.class, new Consumer<RowGroup>() {
@Override
public void consume(RowGroup rowGroup) {
consumer.addRowGroup(rowGroup);
}
})));
}
final InputStream from;
if (null == decryptor) {
from = input;
} else {
byte[] plainText = decryptor.decrypt(input, AAD);
from = new ByteArrayInputStream(plainText);
}
new EventBasedThriftReader(protocol(from)).readStruct(eventConsumer);
} catch (TException e) {
throw new IOException("can not read FileMetaData: " + e.getMessage(), e);
}
}