001: /*
002: *
003: *
004: * Copyright 1990-2007 Sun Microsystems, Inc. All Rights Reserved.
005: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
006: *
007: * This program is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU General Public License version
009: * 2 only, as published by the Free Software Foundation.
010: *
011: * This program is distributed in the hope that it will be useful, but
012: * WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * General Public License version 2 for more details (a copy is
015: * included at /legal/license.txt).
016: *
017: * You should have received a copy of the GNU General Public License
018: * version 2 along with this work; if not, write to the Free Software
019: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA
021: *
022: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
023: * Clara, CA 95054 or visit www.sun.com if you need additional
024: * information or have any questions.
025: */
026:
027: package java.io;
028:
029: import com.sun.cldc.i18n.*;
030:
031: /**
032: * An OutputStreamWriter is a bridge from character streams to byte streams:
033: * Characters written to it are translated into bytes.
034: * The encoding that it uses may be specified by name, or the platform's default
035: * encoding may be accepted.
036: *
037: * <p> Each invocation of a write() method causes the encoding converter to be
038: * invoked on the given character(s). The resulting bytes are accumulated in a
039: * buffer before being written to the underlying output stream. The size of
040: * this buffer may be specified, but by default it is large enough for most
041: * purposes. Note that the characters passed to the write() methods are not
042: * buffered.
043: *
044: * @version 12/17/01 (CLDC 1.1)
045: * @see java.io.Writer
046: * @see java.io.UnsupportedEncodingException
047: * @since CLDC 1.0
048: */
049:
050: public class OutputStreamWriter extends Writer {
051:
052: /**
053: * The underlying character-output stream.
054: */
055: private Writer out;
056:
057: /**
058: * Create an OutputStreamWriter that uses the default character encoding.
059: *
060: * @param os An OutputStream
061: */
062: public OutputStreamWriter(OutputStream os) {
063: out = Helper.getStreamWriter(os);
064: }
065:
066: /**
067: * Create an OutputStreamWriter that uses the named character encoding.
068: *
069: * @param os An OutputStream
070: * @param enc The name of a supported
071: *
072: * @exception UnsupportedEncodingException
073: * If the named encoding is not supported
074: */
075: public OutputStreamWriter(OutputStream os, String enc)
076: throws UnsupportedEncodingException {
077: out = Helper.getStreamWriter(os, enc);
078: }
079:
080: /** Check to make sure that the stream has not been closed */
081: private void ensureOpen() throws IOException {
082: if (out == null) {
083: throw new IOException(
084: /* #ifdef VERBOSE_EXCEPTIONS */
085: /// skipped "Stream closed"
086: /* #endif */
087: );
088: }
089: }
090:
091: /**
092: * Write a single character.
093: *
094: * @exception IOException If an I/O error occurs
095: */
096: public void write(int c) throws IOException {
097: ensureOpen();
098: out.write(c);
099: }
100:
101: /**
102: * Write a portion of an array of characters.
103: *
104: * @param cbuf Buffer of characters to be written
105: * @param off Offset from which to start reading characters
106: * @param len Number of characters to be written
107: *
108: * @exception IOException If an I/O error occurs
109: */
110: public void write(char cbuf[], int off, int len) throws IOException {
111: ensureOpen();
112: if ((off < 0) || (off > cbuf.length) || (len < 0)
113: || ((off + len) > cbuf.length) || ((off + len) < 0)) {
114: throw new IndexOutOfBoundsException();
115: } else if (len == 0) {
116: return;
117: }
118: out.write(cbuf, off, len);
119: }
120:
121: /**
122: * Write a portion of a string.
123: *
124: * @param str String to be written
125: * @param off Offset from which to start reading characters
126: * @param len Number of characters to be written
127: *
128: * @exception IOException If an I/O error occurs
129: */
130: public void write(String str, int off, int len) throws IOException {
131: ensureOpen();
132: if ((off < 0) || (off > str.length()) || (len < 0)
133: || ((off + len) > str.length()) || ((off + len) < 0)) {
134: throw new IndexOutOfBoundsException();
135: } else if (len == 0) {
136: return;
137: }
138: out.write(str, off, len);
139: }
140:
141: /**
142: * Flush the stream.
143: *
144: * @exception IOException If an I/O error occurs
145: */
146: public void flush() throws IOException {
147: ensureOpen();
148: out.flush();
149: }
150:
151: /**
152: * Close the stream.
153: *
154: * @exception IOException If an I/O error occurs
155: */
156: public void close() throws IOException {
157: if (out != null) {
158: out.close();
159: out = null;
160: }
161: }
162:
163: }
|