Class AwsChunkedDecodingInputStream

java.lang.Object
java.io.InputStream
com.adobe.testing.s3mock.util.AwsChunkedDecodingInputStream
All Implemented Interfaces:
Closeable, AutoCloseable

public class AwsChunkedDecodingInputStream extends InputStream
Skips V4 style signing metadata from input streams.

The original stream looks like this (newlines are CRLF):

 5;chunk-signature=7ece820edcf094ce1ef6d643c8db60b67913e28831d9b0430efd2b56a9deec5e
 12345
 0;chunk-signature=ee2c094d7162170fcac17d2c76073cd834b0488bfe52e89e48599b8115c7ffa2
 

The format of each chunk of data is:

 [hex-encoded-number-of-bytes-in-chunk];chunk-signature=[sha256-signature][crlf]
 [payload-bytes-of-this-chunk][crlf]
 
See Also:
  • Field Details

    • CRLF

      protected static final byte[] CRLF
    • DELIMITER

      protected static final byte[] DELIMITER
    • source

      protected final InputStream source
    • payloadLength

      protected long payloadLength
  • Constructor Details

  • Method Details

    • read

      public int read() throws IOException
      Specified by:
      read in class InputStream
      Throws:
      IOException
    • close

      public void close() throws IOException
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Overrides:
      close in class InputStream
      Throws:
      IOException
    • readUntil

      protected byte[] readUntil(byte[] endSequence) throws IOException
      Reads this stream until the byte sequence was found.
      Parameters:
      endSequence - The byte sequence to look for in the stream. The source stream is read until the last bytes read are equal to this sequence.
      Returns:
      The bytes read before the end sequence started.
      Throws:
      IOException
    • endsWith

      protected boolean endsWith(ByteBuffer buffer, byte[] endSequence)
    • setPayloadLength

      protected void setPayloadLength(byte[] hexLengthBytes)