Class LimitedInputStream

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

    public abstract class LimitedInputStream
    extends java.io.FilterInputStream
    Wraps a InputStream, limiting the number of bytes which can be read. This class was copied and modifed from the Google Guava 16.0. Differently from the original Guava code, when a caller tries to read from this stream past the given limit and the wrapped stream hasn't yet reached its EOF this class will call the limitExceeded method instead of returning EOF.
    Since:
    3.3
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private long left  
      protected long limit
      Max number of bytes to be read from the wrapped stream
      private long mark  
      • Fields inherited from class java.io.FilterInputStream

        in
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      protected LimitedInputStream​(java.io.InputStream in, long limit)
      Create a new LimitedInputStream
    • Method Summary

      All Methods Instance Methods Abstract Methods Concrete Methods 
      Modifier and Type Method Description
      int available()
      protected abstract void limitExceeded()
      Called when trying to read past the given limit and the wrapped InputStream FilterInputStream.in hasn't yet reached its EOF
      void mark​(int readLimit)
      int read()
      int read​(byte[] b, int off, int len)
      void reset()
      long skip​(long n)
      • Methods inherited from class java.io.FilterInputStream

        close, markSupported, read
      • Methods inherited from class java.lang.Object

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

      • left

        private long left
      • limit

        protected final long limit
        Max number of bytes to be read from the wrapped stream
      • mark

        private long mark
    • Constructor Detail

      • LimitedInputStream

        protected LimitedInputStream​(java.io.InputStream in,
                                     long limit)
        Create a new LimitedInputStream
        Parameters:
        in - an InputStream
        limit - max number of bytes to read from the InputStream
    • Method Detail

      • available

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

        public void mark​(int readLimit)
        Overrides:
        mark in class java.io.FilterInputStream
      • read

        public int read()
                 throws java.io.IOException
        Overrides:
        read in class java.io.FilterInputStream
        Throws:
        java.io.IOException
      • read

        public int read​(byte[] b,
                        int off,
                        int len)
                 throws java.io.IOException
        Overrides:
        read in class java.io.FilterInputStream
        Throws:
        java.io.IOException
      • reset

        public void reset()
                   throws java.io.IOException
        Overrides:
        reset in class java.io.FilterInputStream
        Throws:
        java.io.IOException
      • skip

        public long skip​(long n)
                  throws java.io.IOException
        Overrides:
        skip in class java.io.FilterInputStream
        Throws:
        java.io.IOException
      • limitExceeded

        protected abstract void limitExceeded()
                                       throws java.io.IOException
        Called when trying to read past the given limit and the wrapped InputStream FilterInputStream.in hasn't yet reached its EOF
        Throws:
        java.io.IOException - subclasses can throw an IOException when the limit is exceeded. The throws java.io.IOException will be forwarded back to the caller of the read method which read the stream past the limit.