Class BaseReader

  • All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable, java.lang.Readable
    Direct Known Subclasses:
    AsciiReader, ISOLatinReader, UTF32Reader, UTF8Reader

    abstract class BaseReader
    extends java.io.Reader
    Simple basic class for optimized Readers Woodstox has; implements "cookie-cutter" methods that are used by all actual implementations.
    • Field Summary

      Fields 
      Modifier and Type Field Description
      (package private) static char CHAR_DEL
      DEL character is both the last ascii char, and illegal in xml 1.1.
      protected static char CONVERT_LSEP_TO
      In xml 1.1, LSEP bit like \n, or \r.
      protected static char CONVERT_NEL_TO
      In xml 1.1, NEL (0x85) behaves much the way \n does (can be follow \r as part of the linefeed
      protected byte[] mByteBuffer  
      protected int mByteBufferEnd
      Pointed to the end marker, that is, position one after the last valid available byte.
      protected int mBytePtr
      Pointer to the next available byte (if any), iff less than mByteBufferEnd
      protected ReaderConfig mConfig  
      private java.io.InputStream mIn  
      private boolean mRecycleBuffer
      Flag that indicates whether the read buffer is to be recycled when Reader is closed or not.
      protected char[] mTmpBuf  
      protected static char NULL_BYTE  
      protected static char NULL_CHAR  
      • Fields inherited from class java.io.Reader

        lock
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      protected BaseReader​(ReaderConfig cfg, java.io.InputStream in, byte[] buf, int ptr, int len, boolean recycleBuffer)  
    • Method Summary

      All Methods Instance Methods Abstract Methods Concrete Methods 
      Modifier and Type Method Description
      protected boolean canModifyBuffer()
      Method that can be used to see if we can actually modify the underlying buffer.
      void close()  
      void freeBuffers()
      This method should be called along with (or instead of) normal close.
      protected java.io.InputStream getStream()  
      int read()
      Although this method is implemented by the base class, AND it should never be called by Woodstox code, let's still implement it bit more efficiently just in case
      protected int readBytes()
      Method for reading as many bytes from the underlying stream as possible (that fit in the buffer), to the beginning of the buffer.
      protected int readBytesAt​(int offset)
      Method for reading as many bytes from the underlying stream as possible (that fit in the buffer considering offset), to the specified offset.
      protected void reportBounds​(char[] cbuf, int start, int len)  
      protected void reportInvalidXml11​(int value, int bytePos, int charPos)  
      protected void reportStrangeStream()  
      abstract void setXmlCompliancy​(int xmlVersion)
      Method that can be called to indicate the xml conformance used when reading content using this reader.
      • Methods inherited from class java.io.Reader

        mark, markSupported, read, read, read, ready, reset, skip
      • Methods inherited from class java.lang.Object

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

      • CONVERT_NEL_TO

        protected static final char CONVERT_NEL_TO
        In xml 1.1, NEL (0x85) behaves much the way \n does (can be follow \r as part of the linefeed
        See Also:
        Constant Field Values
      • CONVERT_LSEP_TO

        protected static final char CONVERT_LSEP_TO
        In xml 1.1, LSEP bit like \n, or \r. Need to choose one as the result. Let's use \n, for simplicity
        See Also:
        Constant Field Values
      • CHAR_DEL

        static final char CHAR_DEL
        DEL character is both the last ascii char, and illegal in xml 1.1.
        See Also:
        Constant Field Values
      • mIn

        private java.io.InputStream mIn
      • mByteBuffer

        protected byte[] mByteBuffer
      • mBytePtr

        protected int mBytePtr
        Pointer to the next available byte (if any), iff less than mByteBufferEnd
      • mByteBufferEnd

        protected int mByteBufferEnd
        Pointed to the end marker, that is, position one after the last valid available byte.
      • mRecycleBuffer

        private final boolean mRecycleBuffer
        Flag that indicates whether the read buffer is to be recycled when Reader is closed or not.
      • mTmpBuf

        protected char[] mTmpBuf
    • Constructor Detail

      • BaseReader

        protected BaseReader​(ReaderConfig cfg,
                             java.io.InputStream in,
                             byte[] buf,
                             int ptr,
                             int len,
                             boolean recycleBuffer)
    • Method Detail

      • setXmlCompliancy

        public abstract void setXmlCompliancy​(int xmlVersion)
        Method that can be called to indicate the xml conformance used when reading content using this reader. Some of the character validity checks need to be done at reader level, and sometimes they depend on xml level (for example, xml 1.1 has new linefeeds and both more and less restricted characters).
      • canModifyBuffer

        protected final boolean canModifyBuffer()
        Method that can be used to see if we can actually modify the underlying buffer. This is the case if we are managing the buffer, but not if it was just given to us.
      • close

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

        public int read()
                 throws java.io.IOException
        Although this method is implemented by the base class, AND it should never be called by Woodstox code, let's still implement it bit more efficiently just in case
        Overrides:
        read in class java.io.Reader
        Throws:
        java.io.IOException
      • getStream

        protected final java.io.InputStream getStream()
      • readBytes

        protected final int readBytes()
                               throws java.io.IOException
        Method for reading as many bytes from the underlying stream as possible (that fit in the buffer), to the beginning of the buffer.
        Throws:
        java.io.IOException
      • readBytesAt

        protected final int readBytesAt​(int offset)
                                 throws java.io.IOException
        Method for reading as many bytes from the underlying stream as possible (that fit in the buffer considering offset), to the specified offset.
        Returns:
        Number of bytes read, if any; -1 to indicate none available (that is, end of input)
        Throws:
        java.io.IOException
      • freeBuffers

        public final void freeBuffers()
        This method should be called along with (or instead of) normal close. After calling this method, no further reads should be tried. Method will try to recycle read buffers (if any).
      • reportBounds

        protected void reportBounds​(char[] cbuf,
                                    int start,
                                    int len)
                             throws java.io.IOException
        Throws:
        java.io.IOException
      • reportStrangeStream

        protected void reportStrangeStream()
                                    throws java.io.IOException
        Throws:
        java.io.IOException
      • reportInvalidXml11

        protected void reportInvalidXml11​(int value,
                                          int bytePos,
                                          int charPos)
                                   throws java.io.IOException
        Throws:
        java.io.IOException