/**
  * Read first {@code sniffLength} bytes of {@code resource}'s payload, decoding {@code
  * Content-Encoding} if any. Reset {@code resource}'s read position back to zero.
  *
  * @param resource Resource to load bytes from
  * @return bytes, zero-padded if payload is shorter.
  * @throws IOException
  */
 protected byte[] peekContent(Resource resource) throws IOException {
   byte[] bbuffer = new byte[Math.max(sniffLength, MINIMUM_SNIFF_BUFFER_SIZE)];
   String encoding = resource.getHeader("content-encoding");
   if ("gzip".equalsIgnoreCase(encoding) || "x-gzip".equalsIgnoreCase(encoding)) {
     // use larger readlimit, because gzip-ed data can be larger than the original
     // at low compression level.
     resource.mark(sniffLength + 100);
     @SuppressWarnings("resource")
     Resource z = new GzipDecodingResource(resource);
     z.read(bbuffer, 0, sniffLength);
     resource.reset();
   } else {
     resource.mark(sniffLength);
     resource.read(bbuffer, 0, sniffLength);
     resource.reset();
   }
   return bbuffer;
 }