static LogHeader read()

in src/main/java/com/spotify/sparkey/LogHeader.java [55:88]


  static LogHeader read(File file) throws IOException {
    try (FileInputStream inputStream = new FileInputStream(file)) {
      int magicNumber = Util.readLittleEndianInt(inputStream);
      if (magicNumber != MAGIC_NUMBER) {
        throw new IOException("File is not a Sparkey log file: " + file);
      }
      int majorVersion = Util.readLittleEndianInt(inputStream);
      if (majorVersion != MAJOR_VERSION) {
        throw new IOException(String.format("Incompatible major version. Expected %d, but got %d: ", MAJOR_VERSION, majorVersion));
      }
      int minorVersion = Util.readLittleEndianInt(inputStream);
      if (minorVersion > MINOR_VERSION) {
        throw new IOException(String.format("Incompatible minor version. Can handle up to version %d, but got %d: ", MINOR_VERSION, minorVersion));
      }
      int fileIdentifier = Util.readLittleEndianInt(inputStream);
      long numPuts = Util.readLittleEndianLong(inputStream);
      long numDeletes = Util.readLittleEndianLong(inputStream);
      long dataEnd = Util.readLittleEndianLong(inputStream);
      long maxKeyLen = Util.readLittleEndianLong(inputStream);
      long maxValueLen = Util.readLittleEndianLong(inputStream);
      long deleteSize = Util.readLittleEndianLong(inputStream);
      int compressionType = Util.readLittleEndianInt(inputStream);
      int compressionBlockSize = Util.readLittleEndianInt(inputStream);
      long putSize = Util.readLittleEndianLong(inputStream);
      int maxEntriesPerBlock = Util.readLittleEndianInt(inputStream);

      if (dataEnd > file.length()) {
        throw new IOException("Corrupt log file '" + file.toString() + "': expected at least " + dataEnd + " size but was " + file.length());
      }

      return new LogHeader(majorVersion, minorVersion, fileIdentifier, numPuts, numDeletes, dataEnd, maxKeyLen, maxValueLen, deleteSize, CompressionType.values()[compressionType], compressionBlockSize, putSize,
              maxEntriesPerBlock);
    }
  }