Class InputStreamWrapper

java.lang.Object
org.jibx.runtime.impl.InputStreamWrapper

public class InputStreamWrapper extends Object
Wrapper for input buffer that supports multiple character encodings. This is needed because the XPP3 pull parser does not support detecting the character encoding for a document based on the content of the document. If used with a common encoding this performs the conversion to characters using an inner reader class; otherwise, this creates the appropriate reader type
Author:
Dennis M. Sosnoski
  • Field Details

    • m_byteBuffer

      private IInByteBuffer m_byteBuffer
      Input buffer.
    • m_encodingName

      private String m_encodingName
      Name of encoding to be used for stream.
    • m_buffer

      private byte[] m_buffer
      Cached reference to byte array used by buffer.
    • m_endOffset

      private int m_endOffset
      Offset past end of bytes in buffer.
    • m_emptyOffset

      private int m_emptyOffset
      Current offset for generating character from buffer.
    • m_scanOffset

      private int m_scanOffset
      Scan position offset used for lookahead in buffer.
  • Constructor Details

    • InputStreamWrapper

      public InputStreamWrapper()
  • Method Details

    • setBuffer

      public void setBuffer(IInByteBuffer buff)
      Set the input buffer.
      Parameters:
      buff -
    • getBuffer

      public IInByteBuffer getBuffer()
      Get input buffer.
      Returns:
      buffer, null if none set
    • setEncoding

      public void setEncoding(String enc) throws IOException
      Set encoding for stream. This call is only valid if the encoding has not been set previously, and if the encoding is a recognized type.
      Parameters:
      enc - character encoding used for input from stream (null if to be determined from XML input)
      Throws:
      IOException - if unknown encoding, or encoding already set
    • fillBuffer

      private boolean fillBuffer() throws IOException
      Reads data into the buffer. The actual number of bytes read by a call to this method is normally between one and the space available in the buffer array.
      Returns:
      true if data has been read into buffer, false if not
      Throws:
      IOException - on error reading from stream
    • require

      private boolean require(int min) throws IOException
      Reads data into the buffer to at least a minimum number of bytes. Any retained data is first copied down to the start of the buffer array. Next, data is read from the wrapped stream into the available space in the buffer until the end of the input stream is reached or at least the requested number of bytes are present in the buffer.
      Parameters:
      min - number of bytes required
      Returns:
      true if buffer contains at least the required byte count on return, false if not
      Throws:
      IOException - on error reading from wrapped stream
    • isWhite

      private boolean isWhite(int chr)
      Check if a character is XML whitespace.
      Parameters:
      chr -
      Returns:
      true if whitespace, false if not
    • scanToken

      private String scanToken() throws IOException
      Reads a space or equals ('=') delimited token from the scan position in the buffer. This treats bytes in the buffer as equivalent to characters. Besides ending a token on a delimitor, it also ends a token after adding a greater-than ('>') character.
      Returns:
      token read from buffer
      Throws:
      IOException - on error reading from wrapped stream
    • scanQuoted

      private String scanQuoted() throws IOException
      Reads a quote delimited token from the scan position in the buffer. This treats bytes in the buffer as equivalent to characters, and skips past any leading whitespace.
      Returns:
      token read from buffer
      Throws:
      IOException - on error reading from wrapped stream
    • getReader

      public Reader getReader() throws IOException
      Get reader for wrapped input stream. This creates and returns a reader using the appropriate encoding, if necessary reading and examining the first part of the stream (including the XML declaration, if present) to determine the encoding.
      Returns:
      reader
      Throws:
      IOException - if error reading from document or creating a reader for the encoding found
    • getEncoding

      public String getEncoding()
      Get encoding for input document. This call may not return an accurate result until after getReader() is called.
      Returns:
      character encoding for input document
    • close

      public void close() throws IOException
      Close document input. Completes reading of document input, including closing the input medium.
      Throws:
      IOException - on error closing document
    • reset

      public void reset()
      Reset to initial state for reuse.