Class BufferingXmlWriter
- java.lang.Object
-
- com.ctc.wstx.sw.XmlWriter
-
- com.ctc.wstx.sw.BufferingXmlWriter
-
- All Implemented Interfaces:
XMLStreamConstants
public final class BufferingXmlWriter extends XmlWriter implements XMLStreamConstants
Concrete implementation ofXmlWriterthat will dispatch writes to another writer (of typeWriter, and will NOT handle encoding. It will, however, do basic buffering such that the underlying Writer need (and thus, should) not do buffering.One design goal for this class is to avoid unnecessary buffering: since there will be another Writer doing the actual encoding, amount of buffering needed should still be limited. To this end, a threshold is used to define what's the threshold of writes that we do want to coalesce, ie. buffer. Writes bigger than this should in general proceed without buffering.
-
-
Field Summary
Fields Modifier and Type Field Description protected static intHIGHEST_ENCODABLE_ATTR_CHARHighest valued character that may need to be encoded (minus charset encoding requirements) when writing attribute values.protected static intHIGHEST_ENCODABLE_TEXT_CHARHighest valued character that may need to be encoded (minus charset encoding requirements) when writing attribute values.protected WritermOutActual Writer to use for outputting buffered data as appropriate.protected char[]mOutputBufferprotected intmOutputBufLenprotected intmOutputPtrprotected intmSmallWriteSizeThis is the threshold used to check what is considered a "small" write; small writes will be buffered until resulting size will be above the threshold.protected OutputStreammUnderlyingStreamActual physical stream that the writer is using, if known.protected static int[]QUOTABLE_TEXT_CHARS-
Fields inherited from class com.ctc.wstx.sw.XmlWriter
DEFAULT_QUOTE_CHAR, mAttrValueWriter, mAutoCloseOutput, mCheckContent, mCheckNames, mCheckStructure, mConfig, mEncoding, mFixContent, mLocPastChars, mLocRowNr, mLocRowStartOffset, mNsAware, mRawWrapper, mTextWrapper, mTextWriter, mXml11, SURR1_FIRST, SURR1_LAST, SURR2_FIRST, SURR2_LAST
-
Fields inherited from interface javax.xml.stream.XMLStreamConstants
ATTRIBUTE, CDATA, CHARACTERS, COMMENT, DTD, END_DOCUMENT, END_ELEMENT, ENTITY_DECLARATION, ENTITY_REFERENCE, NAMESPACE, NOTATION_DECLARATION, PROCESSING_INSTRUCTION, SPACE, START_DOCUMENT, START_ELEMENT
-
-
Constructor Summary
Constructors Constructor Description BufferingXmlWriter(Writer out, WriterConfig cfg, String enc, boolean autoclose, OutputStream outs, int bitsize)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidclose(boolean forceRealClose)Method called to flush the buffer(s), and close the output sink (stream or writer) if enabled (auto-closing) or forced.voidflush()protected intgetOutputPtr()protected OutputStreamgetOutputStream()protected WritergetWriter()static intguessEncodingBitSize(String enc)Method used to figure out which part of the Unicode char set the encoding can natively support.protected intverifyCDataContent(char[] c, int start, int end)protected intverifyCDataContent(String content)protected intverifyCommentContent(String content)protected voidwriteAsEntity(int c)voidwriteAttribute(String localName, char[] value, int offset, int vlen)voidwriteAttribute(String localName, String value)Note: can throw XMLStreamException, if name checking is enabled, and name is invalid (name check has to be in this writer, not caller, since it depends not only on xml limitations, but also on encoding limitations)voidwriteAttribute(String prefix, String localName, char[] value, int offset, int vlen)voidwriteAttribute(String prefix, String localName, String value)Note: can throw XMLStreamException, if name checking is enabled, and name is invalid (name check has to be in this writer, not caller, since it depends not only on xml limitations, but also on encoding limitations)intwriteCData(char[] cbuf, int offset, int len)intwriteCData(String data)voidwriteCDataEnd()voidwriteCDataStart()voidwriteCharacters(char[] cbuf, int offset, int len)voidwriteCharacters(String text)intwriteComment(String data)Method that will try to output the content as specified.voidwriteCommentEnd()voidwriteCommentStart()voidwriteDTD(String data)Older "legacy" output method for outputting DOCTYPE declaration.voidwriteDTD(String rootName, String systemId, String publicId, String internalSubset)voidwriteEndTag(String localName)voidwriteEndTag(String prefix, String localName)voidwriteEntityReference(String name)intwritePI(String target, String data)voidwritePIEnd()voidwritePIStart(String target, boolean addSpace)protected voidwritePrefixedName(String prefix, String localName)voidwriteRaw(char[] cbuf, int offset, int len)voidwriteRaw(String str)voidwriteRaw(String str, int offset, int len)voidwriteRawAscii(char[] cbuf, int offset, int len)Method called to output typed values (int, long, double, float etc) that are known not to contain any escapable characters, or anything else beyond 7-bit ascii range.protected voidwriteSegmentedCData(char[] c, int start, int len, int index)protected voidwriteSegmentedCData(String content, int index)protected voidwriteSegmentedComment(String content, int index)voidwriteStartTagEmptyEnd()voidwriteStartTagEnd()voidwriteStartTagStart(String localName)Note: can throw XMLStreamException, if name checking is enabled, and name is invalid (name check has to be in this writer, not caller, since it depends not only on xml limitations, but also on encoding limitations)voidwriteStartTagStart(String prefix, String localName)Note: can throw XMLStreamException, if name checking is enabled, and name is invalid (name check has to be in this writer, not caller, since it depends not only on xml limitations, but also on encoding limitations)voidwriteTypedAttribute(String prefix, String localName, String nsURI, AsciiValueEncoder enc, XMLValidator validator, char[] copyBuffer)Method similar toXmlWriter.writeAttribute(String,String,char[],int,int)but where is known not to require escaping.voidwriteTypedAttribute(String prefix, String localName, AsciiValueEncoder enc)Method similar toXmlWriter.writeAttribute(String,String,char[],int,int)but where is known not to require escaping.voidwriteTypedAttribute(String localName, AsciiValueEncoder enc)Method similar toXmlWriter.writeAttribute(String,String,char[],int,int)but where is known not to require escaping.voidwriteTypedElement(AsciiValueEncoder enc)LikeXmlWriter.writeRaw(java.lang.String, int, int), but caller guarantees that the contents additionally are known to be in 7-bit ascii range, and also passes an encoder object that will encode values only when being handed a buffer to append to.voidwriteTypedElement(AsciiValueEncoder enc, XMLValidator validator, char[] copyBuffer)LikeXmlWriter.writeRaw(java.lang.String, int, int), but caller guarantees that the contents additionally are known to be in 7-bit ascii range, and also passes an encoder object that will encode values only when being handed a buffer to append to.voidwriteXmlDeclaration(String version, String encoding, String standalone)-
Methods inherited from class com.ctc.wstx.sw.XmlWriter
enableXml11, getAbsOffset, getColumn, getRow, handleInvalidChar, reportNwfContent, reportNwfName, reportNwfName, throwOutputError, throwOutputError, verifyNameValidity, wrapAsRawWriter, wrapAsTextWriter
-
-
-
-
Field Detail
-
HIGHEST_ENCODABLE_ATTR_CHAR
protected static final int HIGHEST_ENCODABLE_ATTR_CHAR
Highest valued character that may need to be encoded (minus charset encoding requirements) when writing attribute values.- See Also:
- Constant Field Values
-
HIGHEST_ENCODABLE_TEXT_CHAR
protected static final int HIGHEST_ENCODABLE_TEXT_CHAR
Highest valued character that may need to be encoded (minus charset encoding requirements) when writing attribute values.- See Also:
- Constant Field Values
-
QUOTABLE_TEXT_CHARS
protected static final int[] QUOTABLE_TEXT_CHARS
-
mOut
protected final Writer mOut
Actual Writer to use for outputting buffered data as appropriate.
-
mOutputBuffer
protected char[] mOutputBuffer
-
mSmallWriteSize
protected final int mSmallWriteSize
This is the threshold used to check what is considered a "small" write; small writes will be buffered until resulting size will be above the threshold.
-
mOutputPtr
protected int mOutputPtr
-
mOutputBufLen
protected int mOutputBufLen
-
mUnderlyingStream
protected final OutputStream mUnderlyingStream
Actual physical stream that the writer is using, if known. Not used for actual output, only needed so that calling application may (try to) figure out the original source.
-
-
Constructor Detail
-
BufferingXmlWriter
public BufferingXmlWriter(Writer out, WriterConfig cfg, String enc, boolean autoclose, OutputStream outs, int bitsize) throws IOException
- Parameters:
outs- Underlying OutputStream that the writer (out) is using, if known. Needed to support (optional) access to the underlying stream- Throws:
IOException
-
-
Method Detail
-
getOutputPtr
protected int getOutputPtr()
- Specified by:
getOutputPtrin classXmlWriter
-
getOutputStream
protected final OutputStream getOutputStream()
- Specified by:
getOutputStreamin classXmlWriter- Returns:
- Underlying OutputStream used for physical output, if the writer was constructed using one
-
getWriter
protected final Writer getWriter()
-
close
public void close(boolean forceRealClose) throws IOExceptionDescription copied from class:XmlWriterMethod called to flush the buffer(s), and close the output sink (stream or writer) if enabled (auto-closing) or forced.- Specified by:
closein classXmlWriter- Throws:
IOException
-
flush
public final void flush() throws IOException- Specified by:
flushin classXmlWriter- Throws:
IOException
-
writeRaw
public void writeRaw(char[] cbuf, int offset, int len) throws IOException- Specified by:
writeRawin classXmlWriter- Throws:
IOException
-
writeRawAscii
public final void writeRawAscii(char[] cbuf, int offset, int len) throws IOExceptionMethod called to output typed values (int, long, double, float etc) that are known not to contain any escapable characters, or anything else beyond 7-bit ascii range.- Specified by:
writeRawAsciiin classXmlWriter- Throws:
IOException
-
writeRaw
public void writeRaw(String str) throws IOException
- Overrides:
writeRawin classXmlWriter- Throws:
IOException
-
writeRaw
public void writeRaw(String str, int offset, int len) throws IOException
- Specified by:
writeRawin classXmlWriter- Throws:
IOException
-
writeCDataStart
public final void writeCDataStart() throws IOException- Specified by:
writeCDataStartin classXmlWriter- Throws:
IOException
-
writeCDataEnd
public final void writeCDataEnd() throws IOException- Specified by:
writeCDataEndin classXmlWriter- Throws:
IOException
-
writeCommentStart
public final void writeCommentStart() throws IOException- Specified by:
writeCommentStartin classXmlWriter- Throws:
IOException
-
writeCommentEnd
public final void writeCommentEnd() throws IOException- Specified by:
writeCommentEndin classXmlWriter- Throws:
IOException
-
writePIStart
public final void writePIStart(String target, boolean addSpace) throws IOException
- Specified by:
writePIStartin classXmlWriter- Throws:
IOException
-
writePIEnd
public final void writePIEnd() throws IOException- Specified by:
writePIEndin classXmlWriter- Throws:
IOException
-
writeCData
public int writeCData(String data) throws IOException
- Specified by:
writeCDatain classXmlWriter- Parameters:
data- Contents of the CDATA section to write out- Returns:
- offset of the (first) illegal content segment ("]]>") in passed content and not in repairing mode; or -1 if none or is repairing
- Throws:
IOException
-
writeCData
public int writeCData(char[] cbuf, int offset, int len) throws IOException- Specified by:
writeCDatain classXmlWriter- Throws:
IOException
-
writeCharacters
public void writeCharacters(String text) throws IOException
- Specified by:
writeCharactersin classXmlWriter- Throws:
IOException
-
writeCharacters
public void writeCharacters(char[] cbuf, int offset, int len) throws IOException- Specified by:
writeCharactersin classXmlWriter- Throws:
IOException
-
writeComment
public int writeComment(String data) throws IOException
Method that will try to output the content as specified. If the content passed in has embedded "--" in it, it will either add an intervening space between consequtive hyphens (if content fixing is enabled), or return the offset of the first hyphen in multi-hyphen sequence.- Specified by:
writeCommentin classXmlWriter- Throws:
IOException
-
writeDTD
public void writeDTD(String data) throws IOException
Description copied from class:XmlWriterOlder "legacy" output method for outputting DOCTYPE declaration. Assumes that the passed-in String contains a complete DOCTYPE declaration properly quoted.- Specified by:
writeDTDin classXmlWriter- Throws:
IOException
-
writeDTD
public void writeDTD(String rootName, String systemId, String publicId, String internalSubset) throws IOException, XMLStreamException
- Specified by:
writeDTDin classXmlWriter- Throws:
IOExceptionXMLStreamException
-
writeEntityReference
public void writeEntityReference(String name) throws IOException, XMLStreamException
- Specified by:
writeEntityReferencein classXmlWriter- Throws:
IOExceptionXMLStreamException
-
writeXmlDeclaration
public void writeXmlDeclaration(String version, String encoding, String standalone) throws IOException
- Specified by:
writeXmlDeclarationin classXmlWriter- Throws:
IOException
-
writePI
public int writePI(String target, String data) throws IOException, XMLStreamException
- Specified by:
writePIin classXmlWriter- Throws:
IOExceptionXMLStreamException
-
writeStartTagStart
public void writeStartTagStart(String localName) throws IOException, XMLStreamException
Description copied from class:XmlWriterNote: can throw XMLStreamException, if name checking is enabled, and name is invalid (name check has to be in this writer, not caller, since it depends not only on xml limitations, but also on encoding limitations)
- Specified by:
writeStartTagStartin classXmlWriter- Throws:
IOExceptionXMLStreamException
-
writeStartTagStart
public void writeStartTagStart(String prefix, String localName) throws IOException, XMLStreamException
Description copied from class:XmlWriterNote: can throw XMLStreamException, if name checking is enabled, and name is invalid (name check has to be in this writer, not caller, since it depends not only on xml limitations, but also on encoding limitations)
- Specified by:
writeStartTagStartin classXmlWriter- Throws:
IOExceptionXMLStreamException
-
writeStartTagEnd
public void writeStartTagEnd() throws IOException- Specified by:
writeStartTagEndin classXmlWriter- Throws:
IOException
-
writeStartTagEmptyEnd
public void writeStartTagEmptyEnd() throws IOException- Specified by:
writeStartTagEmptyEndin classXmlWriter- Throws:
IOException
-
writeEndTag
public void writeEndTag(String localName) throws IOException
- Specified by:
writeEndTagin classXmlWriter- Throws:
IOException
-
writeEndTag
public void writeEndTag(String prefix, String localName) throws IOException
- Specified by:
writeEndTagin classXmlWriter- Throws:
IOException
-
writeAttribute
public void writeAttribute(String localName, String value) throws IOException, XMLStreamException
Description copied from class:XmlWriterNote: can throw XMLStreamException, if name checking is enabled, and name is invalid (name check has to be in this writer, not caller, since it depends not only on xml limitations, but also on encoding limitations)
- Specified by:
writeAttributein classXmlWriter- Throws:
IOExceptionXMLStreamException
-
writeAttribute
public void writeAttribute(String localName, char[] value, int offset, int vlen) throws IOException, XMLStreamException
- Specified by:
writeAttributein classXmlWriter- Throws:
IOExceptionXMLStreamException
-
writeAttribute
public void writeAttribute(String prefix, String localName, String value) throws IOException, XMLStreamException
Description copied from class:XmlWriterNote: can throw XMLStreamException, if name checking is enabled, and name is invalid (name check has to be in this writer, not caller, since it depends not only on xml limitations, but also on encoding limitations)
- Specified by:
writeAttributein classXmlWriter- Throws:
IOExceptionXMLStreamException
-
writeAttribute
public void writeAttribute(String prefix, String localName, char[] value, int offset, int vlen) throws IOException, XMLStreamException
- Specified by:
writeAttributein classXmlWriter- Throws:
IOExceptionXMLStreamException
-
writeTypedElement
public final void writeTypedElement(AsciiValueEncoder enc) throws IOException
Description copied from class:XmlWriterLikeXmlWriter.writeRaw(java.lang.String, int, int), but caller guarantees that the contents additionally are known to be in 7-bit ascii range, and also passes an encoder object that will encode values only when being handed a buffer to append to.- Specified by:
writeTypedElementin classXmlWriter- Parameters:
enc- Encoder that will produce content- Throws:
IOException
-
writeTypedElement
public final void writeTypedElement(AsciiValueEncoder enc, XMLValidator validator, char[] copyBuffer) throws IOException, XMLStreamException
Description copied from class:XmlWriterLikeXmlWriter.writeRaw(java.lang.String, int, int), but caller guarantees that the contents additionally are known to be in 7-bit ascii range, and also passes an encoder object that will encode values only when being handed a buffer to append to.- Specified by:
writeTypedElementin classXmlWriter- Parameters:
enc- Encoder that will produce contentvalidator- Validator to use for validating serialized textual content (can not be null)copyBuffer- Temporary buffer that writer can use for temporary copies as necessary- Throws:
IOExceptionXMLStreamException
-
writeTypedAttribute
public void writeTypedAttribute(String localName, AsciiValueEncoder enc) throws IOException, XMLStreamException
Description copied from class:XmlWriterMethod similar toXmlWriter.writeAttribute(String,String,char[],int,int)but where is known not to require escaping. No validation needs to be performed.- Specified by:
writeTypedAttributein classXmlWriter- Throws:
IOExceptionXMLStreamException
-
writeTypedAttribute
public void writeTypedAttribute(String prefix, String localName, AsciiValueEncoder enc) throws IOException, XMLStreamException
Description copied from class:XmlWriterMethod similar toXmlWriter.writeAttribute(String,String,char[],int,int)but where is known not to require escaping. No validation needs to be performed.- Specified by:
writeTypedAttributein classXmlWriter- Throws:
IOExceptionXMLStreamException
-
writeTypedAttribute
public void writeTypedAttribute(String prefix, String localName, String nsURI, AsciiValueEncoder enc, XMLValidator validator, char[] copyBuffer) throws IOException, XMLStreamException
Description copied from class:XmlWriterMethod similar toXmlWriter.writeAttribute(String,String,char[],int,int)but where is known not to require escaping. Validation of the attribute value must be done by calling given validator appropriately.- Specified by:
writeTypedAttributein classXmlWriter- Throws:
IOExceptionXMLStreamException
-
writePrefixedName
protected final void writePrefixedName(String prefix, String localName) throws IOException
- Throws:
IOException
-
verifyCDataContent
protected int verifyCDataContent(String content)
- Returns:
- Index at which a problem was found, if any; -1 if there's no problem.
-
verifyCDataContent
protected int verifyCDataContent(char[] c, int start, int end)
-
verifyCommentContent
protected int verifyCommentContent(String content)
-
writeSegmentedCData
protected void writeSegmentedCData(String content, int index) throws IOException
- Throws:
IOException
-
writeSegmentedCData
protected void writeSegmentedCData(char[] c, int start, int len, int index) throws IOException- Throws:
IOException
-
writeSegmentedComment
protected void writeSegmentedComment(String content, int index) throws IOException
- Throws:
IOException
-
guessEncodingBitSize
public static int guessEncodingBitSize(String enc)
Method used to figure out which part of the Unicode char set the encoding can natively support. Values returned are 7, 8 and 16, to indicate (respectively) "ascii", "ISO-Latin" and "native Unicode". These just best guesses, but should work ok for the most common encodings.
-
writeAsEntity
protected final void writeAsEntity(int c) throws IOException- Throws:
IOException
-
-