Class EndstreamOutputStream

All Implemented Interfaces:
Closeable, Flushable, AutoCloseable

class EndstreamOutputStream extends BufferedOutputStream
This class is only for the readUntilEndStream method, to prevent a final CR LF or LF (but not a final CR!) from being written to the output, unless the beginning of the stream is assumed to be ASCII. Only the 3-param write() method is implemented. This solves PDFBOX-2079 and PDFBOX-2120 and avoids making readUntilEndStream() even more complex than it already is.
  • Field Details

    • hasCR

      private boolean hasCR
    • hasLF

      private boolean hasLF
    • pos

      private int pos
    • mustFilter

      private boolean mustFilter
  • Constructor Details

    • EndstreamOutputStream

      EndstreamOutputStream(OutputStream out)
  • Method Details

    • write

      public void write(byte[] b, int off, int len) throws IOException
      Write CR and/or LF that were kept, then writes len bytes from the specified byte array starting at offset off to this output stream, except trailing CR, CR LF, or LF. No filtering will be done for the entire stream if the beginning is assumed to be ASCII.
      Overrides:
      write in class BufferedOutputStream
      Parameters:
      b - byte array.
      off - offset.
      len - length of segment to write.
      Throws:
      IOException
    • flush

      public void flush() throws IOException
      write out a single CR if one was kept. Don't write kept CR LF or LF, and then call the base method to flush.
      Specified by:
      flush in interface Flushable
      Overrides:
      flush in class BufferedOutputStream
      Throws:
      IOException