Package org.jibx.runtime.impl
Class InputStreamWrapper
- java.lang.Object
-
- org.jibx.runtime.impl.InputStreamWrapper
-
public class InputStreamWrapper extends java.lang.ObjectWrapper 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
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private classInputStreamWrapper.WrappedStreamStream that just uses the enclosing class to buffer input from the wrapped stream.private classInputStreamWrapper.WrappedStreamISO88591ReaderReader for input stream using ISO8859-1 encoding.private classInputStreamWrapper.WrappedStreamUTF8ReaderReader for input stream using UTF-8 encoding.
-
Field Summary
Fields Modifier and Type Field Description private byte[]m_bufferCached reference to byte array used by buffer.private IInByteBufferm_byteBufferInput buffer.private intm_emptyOffsetCurrent offset for generating character from buffer.private java.lang.Stringm_encodingNameName of encoding to be used for stream.private intm_endOffsetOffset past end of bytes in buffer.private intm_scanOffsetScan position offset used for lookahead in buffer.
-
Constructor Summary
Constructors Constructor Description InputStreamWrapper()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidclose()Close document input.private booleanfillBuffer()Reads data into the buffer.IInByteBuffergetBuffer()Get input buffer.java.lang.StringgetEncoding()Get encoding for input document.java.io.ReadergetReader()Get reader for wrapped input stream.private booleanisWhite(int chr)Check if a character is XML whitespace.private booleanrequire(int min)Reads data into the buffer to at least a minimum number of bytes.voidreset()Reset to initial state for reuse.private java.lang.StringscanQuoted()Reads a quote delimited token from the scan position in the buffer.private java.lang.StringscanToken()Reads a space or equals ('=') delimited token from the scan position in the buffer.voidsetBuffer(IInByteBuffer buff)Set the input buffer.voidsetEncoding(java.lang.String enc)Set encoding for stream.
-
-
-
Field Detail
-
m_byteBuffer
private IInByteBuffer m_byteBuffer
Input buffer.
-
m_encodingName
private java.lang.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.
-
-
Method Detail
-
setBuffer
public void setBuffer(IInByteBuffer buff)
Set the input buffer.- Parameters:
buff-
-
getBuffer
public IInByteBuffer getBuffer()
Get input buffer.- Returns:
- buffer,
nullif none set
-
setEncoding
public void setEncoding(java.lang.String enc) throws java.io.IOExceptionSet 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 (nullif to be determined from XML input)- Throws:
java.io.IOException- if unknown encoding, or encoding already set
-
fillBuffer
private boolean fillBuffer() throws java.io.IOExceptionReads 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:
trueif data has been read into buffer,falseif not- Throws:
java.io.IOException- on error reading from stream
-
require
private boolean require(int min) throws java.io.IOExceptionReads 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:
trueif buffer contains at least the required byte count on return,falseif not- Throws:
java.io.IOException- on error reading from wrapped stream
-
isWhite
private boolean isWhite(int chr)
Check if a character is XML whitespace.- Parameters:
chr-- Returns:
trueif whitespace,falseif not
-
scanToken
private java.lang.String scanToken() throws java.io.IOExceptionReads 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:
java.io.IOException- on error reading from wrapped stream
-
scanQuoted
private java.lang.String scanQuoted() throws java.io.IOExceptionReads 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:
java.io.IOException- on error reading from wrapped stream
-
getReader
public java.io.Reader getReader() throws java.io.IOExceptionGet 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:
java.io.IOException- if error reading from document or creating a reader for the encoding found
-
getEncoding
public java.lang.String getEncoding()
Get encoding for input document. This call may not return an accurate result until aftergetReader()is called.- Returns:
- character encoding for input document
-
close
public void close() throws java.io.IOExceptionClose document input. Completes reading of document input, including closing the input medium.- Throws:
java.io.IOException- on error closing document
-
reset
public void reset()
Reset to initial state for reuse.
-
-