/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package java.io; /** * Wraps an existing {@link Writer} and performs some transformation on the * output data while it is being written. Transformations can be anything from a * simple byte-wise filtering output data to an on-the-fly compression or * decompression of the underlying writer. Writers that wrap another writer and * provide some additional functionality on top of it usually inherit from this * class. * * @see FilterReader */ public abstract class FilterWriter extends Writer { /** * The Writer being filtered. */ protected Writer out; /** * Constructs a new FilterWriter on the Writer {@code out}. All writes are * now filtered through this writer. * * @param out * the target Writer to filter writes on. */ protected FilterWriter(Writer out) { super(out); this.out = out; } /** * Closes this writer. This implementation closes the target writer. * * @throws IOException * if an error occurs attempting to close this writer. */ @Override public void close() throws IOException { synchronized (lock) { out.close(); } } /** * Flushes this writer to ensure all pending data is sent out to the target * writer. This implementation flushes the target writer. * * @throws IOException * if an error occurs attempting to flush this writer. */ @Override public void flush() throws IOException { synchronized (lock) { out.flush(); } } /** * Writes {@code count} characters from the char array {@code buffer} * starting at position {@code offset} to the target writer. * * @param buffer * the buffer to write. * @param offset * the index of the first character in {@code buffer} to write. * @param count * the number of characters in {@code buffer} to write. * @throws IOException * if an error occurs while writing to this writer. */ @Override public void write(char[] buffer, int offset, int count) throws IOException { synchronized (lock) { out.write(buffer, offset, count); } } /** * Writes the specified character {@code oneChar} to the target writer. Only the * two least significant bytes of the integer {@code oneChar} are written. * * @param oneChar * the char to write to the target writer. * @throws IOException * if an error occurs while writing to this writer. */ @Override public void write(int oneChar) throws IOException { synchronized (lock) { out.write(oneChar); } } /** * Writes {@code count} characters from the string {@code str} starting at * position {@code index} to this writer. This implementation writes * {@code str} to the target writer. * * @param str * the string to be written. * @param offset * the index of the first character in {@code str} to write. * @param count * the number of chars in {@code str} to write. * @throws IOException * if an error occurs while writing to this writer. */ @Override public void write(String str, int offset, int count) throws IOException { synchronized (lock) { out.write(str, offset, count); } } }