public static void readFileMetaData()

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);
    }
  }