Class ArmoredInputStream

  • All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable

    public class ArmoredInputStream
    extends java.io.InputStream
    reader for Base64 armored objects - read the headers and then start returning bytes when the data is reached. An IOException is thrown if the CRC check is detected and fails.

    By default a missing CRC will not cause an exception. To force CRC detection use: ArmoredInputStream aIn = [] aIn.setDetectMissingCRC(true);

    • Constructor Summary

      Constructors 
      Constructor Description
      ArmoredInputStream​(java.io.InputStream in)
      Create a stream for reading a PGP armoured message, parsing up to a header and then reading the data that follows.
      ArmoredInputStream​(java.io.InputStream in, boolean hasHeaders)
      Create an armoured input stream which will assume the data starts straight away, or parse for headers first depending on the value of hasHeaders.
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods 
      Modifier and Type Method Description
      int available()  
      static ArmoredInputStream.Builder builder()  
      void close()  
      java.lang.String getArmorHeaderLine()
      Return the armor header line (if there is one)
      java.lang.String[] getArmorHeaders()
      Return the armor headers (the lines after the armor header line),
      boolean isClearText()  
      boolean isEndOfStream()  
      int read()  
      int read​(byte[] b, int off, int len)
      Reads up to len bytes of data from the input stream into an array of bytes.
      void setDetectMissingCRC​(boolean detectMissing)
      Deprecated.
      use Builder class for configuring this.
      • Methods inherited from class java.io.InputStream

        mark, markSupported, nullInputStream, read, readAllBytes, readNBytes, readNBytes, reset, skip, transferTo
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • ArmoredInputStream

        public ArmoredInputStream​(java.io.InputStream in)
                           throws java.io.IOException
        Create a stream for reading a PGP armoured message, parsing up to a header and then reading the data that follows.
        Parameters:
        in -
        Throws:
        java.io.IOException
      • ArmoredInputStream

        public ArmoredInputStream​(java.io.InputStream in,
                                  boolean hasHeaders)
                           throws java.io.IOException
        Create an armoured input stream which will assume the data starts straight away, or parse for headers first depending on the value of hasHeaders.
        Parameters:
        in -
        hasHeaders - true if headers are to be looked for, false otherwise.
        Throws:
        java.io.IOException
    • Method Detail

      • available

        public int available()
                      throws java.io.IOException
        Overrides:
        available in class java.io.InputStream
        Throws:
        java.io.IOException
      • isClearText

        public boolean isClearText()
        Returns:
        true if we are inside the clear text section of a PGP signed message.
      • isEndOfStream

        public boolean isEndOfStream()
        Returns:
        true if the stream is actually at end of file.
      • getArmorHeaderLine

        public java.lang.String getArmorHeaderLine()
        Return the armor header line (if there is one)
        Returns:
        the armor header line, null if none present.
      • getArmorHeaders

        public java.lang.String[] getArmorHeaders()
        Return the armor headers (the lines after the armor header line),
        Returns:
        an array of armor headers, null if there aren't any.
      • read

        public int read()
                 throws java.io.IOException
        Specified by:
        read in class java.io.InputStream
        Throws:
        java.io.IOException
      • read

        public int read​(byte[] b,
                        int off,
                        int len)
                 throws java.io.IOException
        Reads up to len bytes of data from the input stream into an array of bytes. An attempt is made to read as many as len bytes, but a smaller number may be read. The number of bytes actually read is returned as an integer. The first byte read is stored into element b[off], the next one into b[off+1], and so on. The number of bytes read is, at most, equal to len. NOTE: We need to override the custom behavior of Java's InputStream.read(byte[], int, int), as the upstream method silently swallows IOExceptions. This would cause CRC checksum errors to go unnoticed.
        Overrides:
        read in class java.io.InputStream
        Parameters:
        b - byte array
        off - offset at which we start writing data to the array
        len - number of bytes we write into the array
        Returns:
        total number of bytes read into the buffer
        Throws:
        java.io.IOException - if an exception happens AT ANY POINT
        See Also:
        Related BC bug report
      • close

        public void close()
                   throws java.io.IOException
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable
        Overrides:
        close in class java.io.InputStream
        Throws:
        java.io.IOException
      • setDetectMissingCRC

        public void setDetectMissingCRC​(boolean detectMissing)
        Deprecated.
        use Builder class for configuring this.
        Change how the stream should react if it encounters missing CRC checksum. The default value is false (ignore missing CRC checksums). If the behavior is set to true, an IOException will be thrown if a missing CRC checksum is encountered.
        Parameters:
        detectMissing - false if ignore missing CRC sums, true for exception