001: /*
002: * Copyright 1999-2004 The Apache Software Foundation.
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: */
016: /*
017: * $Id: WriterToASCI.java,v 1.5 2005/01/23 00:52:41 mcnamara Exp $
018: */
019: package org.apache.xml.serializer;
020:
021: import java.io.IOException;
022: import java.io.OutputStream;
023: import java.io.Writer;
024:
025: /**
026: * This class writes ASCII to a byte stream as quickly as possible. For the
027: * moment it does not do buffering, though I reserve the right to do some
028: * buffering down the line if I can prove that it will be faster even if the
029: * output stream is buffered.
030: *
031: * This class is only used internally within Xalan.
032: *
033: * @xsl.usage internal
034: */
035: class WriterToASCI extends Writer implements WriterChain {
036:
037: /** The byte stream to write to. */
038: private final OutputStream m_os;
039:
040: /**
041: * Create an unbuffered ASCII writer.
042: *
043: *
044: * @param os The byte stream to write to.
045: */
046: public WriterToASCI(OutputStream os) {
047: m_os = os;
048: }
049:
050: /**
051: * Write a portion of an array of characters.
052: *
053: * @param chars Array of characters
054: * @param start Offset from which to start writing characters
055: * @param length Number of characters to write
056: *
057: * @exception IOException If an I/O error occurs
058: *
059: * @throws java.io.IOException
060: */
061: public void write(char chars[], int start, int length)
062: throws java.io.IOException {
063:
064: int n = length + start;
065:
066: for (int i = start; i < n; i++) {
067: m_os.write(chars[i]);
068: }
069: }
070:
071: /**
072: * Write a single character. The character to be written is contained in
073: * the 16 low-order bits of the given integer value; the 16 high-order bits
074: * are ignored.
075: *
076: * <p> Subclasses that intend to support efficient single-character output
077: * should override this method.
078: *
079: * @param c int specifying a character to be written.
080: * @exception IOException If an I/O error occurs
081: */
082: public void write(int c) throws IOException {
083: m_os.write(c);
084: }
085:
086: /**
087: * Write a string.
088: *
089: * @param s String to be written
090: *
091: * @exception IOException If an I/O error occurs
092: */
093: public void write(String s) throws IOException {
094: int n = s.length();
095: for (int i = 0; i < n; i++) {
096: m_os.write(s.charAt(i));
097: }
098: }
099:
100: /**
101: * Flush the stream. If the stream has saved any characters from the
102: * various write() methods in a buffer, write them immediately to their
103: * intended destination. Then, if that destination is another character or
104: * byte stream, flush it. Thus one flush() invocation will flush all the
105: * buffers in a chain of Writers and OutputStreams.
106: *
107: * @exception IOException If an I/O error occurs
108: */
109: public void flush() throws java.io.IOException {
110: m_os.flush();
111: }
112:
113: /**
114: * Close the stream, flushing it first. Once a stream has been closed,
115: * further write() or flush() invocations will cause an IOException to be
116: * thrown. Closing a previously-closed stream, however, has no effect.
117: *
118: * @exception IOException If an I/O error occurs
119: */
120: public void close() throws java.io.IOException {
121: m_os.close();
122: }
123:
124: /**
125: * Get the output stream where the events will be serialized to.
126: *
127: * @return reference to the result stream, or null of only a writer was
128: * set.
129: */
130: public OutputStream getOutputStream() {
131: return m_os;
132: }
133:
134: /**
135: * Get the writer that this writer directly chains to.
136: */
137: public Writer getWriter() {
138: return null;
139: }
140: }
|