void readExtraFromCentralDirectoryBytes(byte @NotNull [] extraBytes) throws IOException {
    UnsyncByteArrayInputStream stream = new UnsyncByteArrayInputStream(extraBytes);
    while (stream.available() > 0) {
      ZipShort headerId = new ZipShort(stream.readShortLittleEndian());
      JBZipExtraField field;
      if (headerId.equals(Zip64ExtraField.HEADER_ID)) {
        field = new Zip64ExtraField();
      }
      else {
        field = new UnrecognizedExtraField(headerId);
      }
      int length = stream.readShortLittleEndian();
      field.parseFromCentralDirectoryData(readNBytes(stream, length), 0, length);
      addExtra(field);
      if (field instanceof Zip64ExtraField) {
        Zip64ExtraField zip64ExtraField = (Zip64ExtraField)field;
        ZipUInt64 compressedSize = zip64ExtraField.getCompressedSize();
        if (compressedSize != null) {
          setCompressedSize(compressedSize.getLongValue());
        }
        ZipUInt64 size = zip64ExtraField.getSize();
        if (size != null) {
          setSize(size.getLongValue());
        }
        ZipUInt64 offset = zip64ExtraField.getHeaderOffset();
        if (offset != null) {
          setHeaderOffset(offset.getLongValue());
        }
      }
    }
  }
void readExtraFromCentralDirectoryBytes(byte @NotNull [] extraBytes)