GzipStreamInterceptor.java
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
package com.amazon.ion.util;
import java.io.IOException;
import java.io.InputStream;
import java.util.zip.GZIPInputStream;
/**
* The interceptor for GZIP streams. This is a singleton that may be accessed using {@link #INSTANCE}.
*/
public enum GzipStreamInterceptor implements InputStreamInterceptor {
INSTANCE;
private static final byte[] GZIP_HEADER = {0x1F, (byte) 0x8B};
@Override
public String formatName() {
return "gzip";
}
@Override
public int numberOfBytesNeededToDetermineMatch() {
return GZIP_HEADER.length;
}
@Override
public boolean isMatch(byte[] candidate, int offset, int length) {
if (candidate == null || length < GZIP_HEADER.length) {
return false;
}
for (int i = 0; i < GZIP_HEADER.length; i++) {
if (GZIP_HEADER[i] != candidate[offset + i]) {
return false;
}
}
return true;
}
@Override
public InputStream newInputStream(InputStream interceptedStream) throws IOException {
return new GZIPInputStream(interceptedStream);
}
}