in parquet-format-structures/src/main/java/org/apache/parquet/format/Util.java [275:338]
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);
}
}