/* * * * Copyright 1990-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License version * 2 only, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License version 2 for more details (a copy is * included at /legal/license.txt). * * You should have received a copy of the GNU General Public License * version 2 along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 or visit www.sun.com if you need additional * information or have any questions. */ package java.io; import com.sun.cldc.i18n.*; /** * An OutputStreamWriter is a bridge from character streams to byte streams: * Characters written to it are translated into bytes. * The encoding that it uses may be specified by name, or the platform's default * encoding may be accepted. * * <p> Each invocation of a write() method causes the encoding converter to be * invoked on the given character(s). The resulting bytes are accumulated in a * buffer before being written to the underlying output stream. The size of * this buffer may be specified, but by default it is large enough for most * purposes. Note that the characters passed to the write() methods are not * buffered. * * @version 12/17/01 (CLDC 1.1) * @see java.io.Writer * @see java.io.UnsupportedEncodingException * @since CLDC 1.0 */ public class OutputStreamWriter extends Writer { /** * The underlying character-output stream. */ private Writer out; /** * Create an OutputStreamWriter that uses the default character encoding. * * @param os An OutputStream */ public OutputStreamWriter(OutputStream os) { out = Helper.getStreamWriter(os); } /** * Create an OutputStreamWriter that uses the named character encoding. * * @param os An OutputStream * @param enc The name of a supported * * @exception UnsupportedEncodingException * If the named encoding is not supported */ public OutputStreamWriter(OutputStream os, String enc) throws UnsupportedEncodingException { out = Helper.getStreamWriter(os, enc); } /** Check to make sure that the stream has not been closed */ private void ensureOpen() throws IOException { if (out == null) { throw new IOException( /* #ifdef VERBOSE_EXCEPTIONS */ /// skipped "Stream closed" /* #endif */ ); } } /** * Write a single character. * * @exception IOException If an I/O error occurs */ public void write(int c) throws IOException { ensureOpen(); out.write(c); } /** * Write a portion of an array of characters. * * @param cbuf Buffer of characters to be written * @param off Offset from which to start reading characters * @param len Number of characters to be written * * @exception IOException If an I/O error occurs */ public void write(char cbuf[], int off, int len) throws IOException { ensureOpen(); if ((off < 0) || (off > cbuf.length) || (len < 0) || ((off + len) > cbuf.length) || ((off + len) < 0)) { throw new IndexOutOfBoundsException(); } else if (len == 0) { return; } out.write(cbuf, off, len); } /** * Write a portion of a string. * * @param str String to be written * @param off Offset from which to start reading characters * @param len Number of characters to be written * * @exception IOException If an I/O error occurs */ public void write(String str, int off, int len) throws IOException { ensureOpen(); if ((off < 0) || (off > str.length()) || (len < 0) || ((off + len) > str.length()) || ((off + len) < 0)) { throw new IndexOutOfBoundsException(); } else if (len == 0) { return; } out.write(str, off, len); } /** * Flush the stream. * * @exception IOException If an I/O error occurs */ public void flush() throws IOException { ensureOpen(); out.flush(); } /** * Close the stream. * * @exception IOException If an I/O error occurs */ public void close() throws IOException { if (out != null) { out.close(); out = null; } } }