001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017:
018: package java.io;
019:
020: /**
021: * FilterWriter is a class which takes a Writer and <em>filters</em> the
022: * output in some way. The filtered view may be a buffered output or one which
023: * compresses data before actually writing the bytes.
024: *
025: * @see FilterWriter
026: */
027: public abstract class FilterWriter extends Writer {
028:
029: /**
030: * The Writer being filtered.
031: */
032: protected Writer out;
033:
034: /**
035: * Constructs a new FilterWriter on the Writer <code>out</code>. All
036: * writes are now filtered through this Writer.
037: *
038: * @param out
039: * the target Writer to filter writes on.
040: */
041: protected FilterWriter(Writer out) {
042: super (out);
043: this .out = out;
044: }
045:
046: /**
047: * Close this FilterWriter. Closes the Writer <code>out</code> by default.
048: * This will close any downstream Writers as well. Any additional processing
049: * required by concrete subclasses should be provided in their own
050: * <code>close</code> implementation.
051: *
052: * @throws java.io.IOException
053: * If an error occurs attempting to close this FilterWriter.
054: */
055: @Override
056: public void close() throws IOException {
057: synchronized (lock) {
058: out.close();
059: }
060: }
061:
062: /**
063: * Flush this FilteredWriter to ensure all pending data is sent out to the
064: * target Writer. This implementation flushes the target Writer.
065: *
066: * @throws java.io.IOException
067: * If an error occurs attempting to flush this FilterWriter.
068: */
069: @Override
070: public void flush() throws IOException {
071: synchronized (lock) {
072: out.flush();
073: }
074: }
075:
076: /**
077: * Writes <code>count</code> <code>chars</code> from the char array
078: * <code>buffer</code> starting at offset <code>index</code> to this
079: * FilterWriter. This implementation writes the <code>buffer</code> to the
080: * target Writer.
081: *
082: * @param buffer
083: * the buffer to be written
084: * @param offset
085: * offset in buffer to get chars
086: * @param count
087: * number of chars in buffer to write
088: *
089: * @throws java.io.IOException
090: * If an error occurs attempting to write to this FilterWriter.
091: */
092: @Override
093: public void write(char buffer[], int offset, int count)
094: throws IOException {
095: synchronized (lock) {
096: out.write(buffer, offset, count);
097: }
098: }
099:
100: /**
101: * Writes the specified char <code>oneChar</code> to this FilterWriter.
102: * Only the 2 low order bytes of <code>oneChar</code> is written. This
103: * implementation writes the char to the target Writer.
104: *
105: * @param oneChar
106: * the char to be written
107: *
108: * @throws java.io.IOException
109: * If an error occurs attempting to write to this FilterWriter.
110: */
111: @Override
112: public void write(int oneChar) throws IOException {
113: synchronized (lock) {
114: out.write(oneChar);
115: }
116: }
117:
118: /**
119: * Writes <code>count</code> <code>chars</code> from the String
120: * <code>str</code> starting at offset <code>index</code> to this
121: * FilterWriter. This implementation writes the <code>str</code> to the
122: * target Writer.
123: *
124: * @param str
125: * the String to be written.
126: * @param offset
127: * offset in str to get chars.
128: * @param count
129: * number of chars in str to write.
130: *
131: * @throws java.io.IOException
132: * If an error occurs attempting to write to this FilterWriter.
133: */
134: @Override
135: public void write(String str, int offset, int count)
136: throws IOException {
137: synchronized (lock) {
138: out.write(str, offset, count);
139: }
140: }
141: }
|