151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski/*
26c0b680f9b6737327f7305dc266e302e594bf70bPrzemyslaw Szczepaniak * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski *
551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This code is free software; you can redistribute it and/or modify it
651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * under the terms of the GNU General Public License version 2 only, as
751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * published by the Free Software Foundation.  Oracle designates this
851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * particular file as subject to the "Classpath" exception as provided
951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * by Oracle in the LICENSE file that accompanied this code.
1051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski *
1151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This code is distributed in the hope that it will be useful, but WITHOUT
1251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
1351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
1451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * version 2 for more details (a copy is included in the LICENSE file that
1551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * accompanied this code).
1651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski *
1751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * You should have received a copy of the GNU General Public License version
1851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 2 along with this work; if not, write to the Free Software Foundation,
1951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
2051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski *
2151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * or visit www.oracle.com if you need additional information or have any
2351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * questions.
2451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */
2551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski
2651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskipackage java.io;
2751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski
2851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiimport java.nio.charset.Charset;
2951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiimport java.nio.charset.CharsetEncoder;
3051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiimport sun.nio.cs.StreamEncoder;
3151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski
3251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski
3351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski/**
3451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * An OutputStreamWriter is a bridge from character streams to byte streams:
3551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Characters written to it are encoded into bytes using a specified {@link
366c0b680f9b6737327f7305dc266e302e594bf70bPrzemyslaw Szczepaniak * java.nio.charset.Charset charset}.  The charset that it uses
3751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * may be specified by name or may be given explicitly, or the platform's
3851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * default charset may be accepted.
3951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski *
4051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> Each invocation of a write() method causes the encoding converter to be
4151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * invoked on the given character(s).  The resulting bytes are accumulated in a
4251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * buffer before being written to the underlying output stream.  The size of
4351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * this buffer may be specified, but by default it is large enough for most
4451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * purposes.  Note that the characters passed to the write() methods are not
4551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * buffered.
4651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski *
4751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> For top efficiency, consider wrapping an OutputStreamWriter within a
4851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * BufferedWriter so as to avoid frequent converter invocations.  For example:
4951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski *
5051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <pre>
5151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Writer out
5251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski *   = new BufferedWriter(new OutputStreamWriter(System.out));
5351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * </pre>
5451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski *
5551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> A <i>surrogate pair</i> is a character represented by a sequence of two
5651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <tt>char</tt> values: A <i>high</i> surrogate in the range '&#92;uD800' to
5751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * '&#92;uDBFF' followed by a <i>low</i> surrogate in the range '&#92;uDC00' to
5851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * '&#92;uDFFF'.
5951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski *
6051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> A <i>malformed surrogate element</i> is a high surrogate that is not
6151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * followed by a low surrogate or a low surrogate that is not preceded by a
6251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * high surrogate.
6351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski *
6451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> This class always replaces malformed surrogate elements and unmappable
6551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * character sequences with the charset's default <i>substitution sequence</i>.
6651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * The {@linkplain java.nio.charset.CharsetEncoder} class should be used when more
6751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * control over the encoding process is required.
6851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski *
6951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see BufferedWriter
7051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see OutputStream
7151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.nio.charset.Charset
7251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski *
7351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @author      Mark Reinhold
7451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @since       JDK1.1
7551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */
7651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski
7751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskipublic class OutputStreamWriter extends Writer {
7851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski
7951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    private final StreamEncoder se;
8051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski
8151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    /**
8251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * Creates an OutputStreamWriter that uses the named charset.
8351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     *
8451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * @param  out
8551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     *         An OutputStream
8651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     *
8751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * @param  charsetName
8851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     *         The name of a supported
896c0b680f9b6737327f7305dc266e302e594bf70bPrzemyslaw Szczepaniak     *         {@link java.nio.charset.Charset charset}
9051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     *
9151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * @exception  UnsupportedEncodingException
9251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     *             If the named encoding is not supported
9351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     */
9451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    public OutputStreamWriter(OutputStream out, String charsetName)
9551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        throws UnsupportedEncodingException
9651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    {
9751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        super(out);
9851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        if (charsetName == null)
9951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski            throw new NullPointerException("charsetName");
10051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        se = StreamEncoder.forOutputStreamWriter(out, this, charsetName);
10151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    }
10251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski
10351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    /**
10451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * Creates an OutputStreamWriter that uses the default character encoding.
10551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     *
10651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * @param  out  An OutputStream
10751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     */
10851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    public OutputStreamWriter(OutputStream out) {
10951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        super(out);
11051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        try {
11151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski            se = StreamEncoder.forOutputStreamWriter(out, this, (String)null);
11251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        } catch (UnsupportedEncodingException e) {
11351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski            throw new Error(e);
11451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        }
11551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    }
11651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski
11751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    /**
1186c0b680f9b6737327f7305dc266e302e594bf70bPrzemyslaw Szczepaniak     * Creates an OutputStreamWriter that uses the given charset.
11951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     *
12051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * @param  out
12151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     *         An OutputStream
12251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     *
12351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * @param  cs
12451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     *         A charset
12551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     *
12651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * @since 1.4
12751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * @spec JSR-51
12851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     */
12951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    public OutputStreamWriter(OutputStream out, Charset cs) {
13051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        super(out);
13151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        if (cs == null)
13251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski            throw new NullPointerException("charset");
13351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        se = StreamEncoder.forOutputStreamWriter(out, this, cs);
13451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    }
13551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski
13651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    /**
1376c0b680f9b6737327f7305dc266e302e594bf70bPrzemyslaw Szczepaniak     * Creates an OutputStreamWriter that uses the given charset encoder.
13851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     *
13951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * @param  out
14051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     *         An OutputStream
14151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     *
14251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * @param  enc
14351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     *         A charset encoder
14451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     *
14551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * @since 1.4
14651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * @spec JSR-51
14751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     */
14851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    public OutputStreamWriter(OutputStream out, CharsetEncoder enc) {
14951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        super(out);
15051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        if (enc == null)
15151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski            throw new NullPointerException("charset encoder");
15251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        se = StreamEncoder.forOutputStreamWriter(out, this, enc);
15351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    }
15451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski
15551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    /**
15651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * Returns the name of the character encoding being used by this stream.
15751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     *
15851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * <p> If the encoding has an historical name then that name is returned;
15951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * otherwise the encoding's canonical name is returned.
16051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     *
16151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * <p> If this instance was created with the {@link
16251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * #OutputStreamWriter(OutputStream, String)} constructor then the returned
16351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * name, being unique for the encoding, may differ from the name passed to
16451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * the constructor.  This method may return <tt>null</tt> if the stream has
16551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * been closed. </p>
16651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     *
16751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * @return The historical name of this encoding, or possibly
16851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     *         <code>null</code> if the stream has been closed
16951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     *
17051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * @see java.nio.charset.Charset
17151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     *
17251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * @revised 1.4
17351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * @spec JSR-51
17451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     */
17551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    public String getEncoding() {
17651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        return se.getEncoding();
17751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    }
17851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski
17951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    /**
18051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * Flushes the output buffer to the underlying byte stream, without flushing
18151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * the byte stream itself.  This method is non-private only so that it may
18251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * be invoked by PrintStream.
18351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     */
18451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    void flushBuffer() throws IOException {
18551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        se.flushBuffer();
18651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    }
18751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski
18851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    /**
18951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * Writes a single character.
19051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     *
19151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * @exception  IOException  If an I/O error occurs
19251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     */
19351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    public void write(int c) throws IOException {
19451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        se.write(c);
19551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    }
19651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski
19751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    /**
19851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * Writes a portion of an array of characters.
19951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     *
20051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * @param  cbuf  Buffer of characters
20151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * @param  off   Offset from which to start writing characters
20251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * @param  len   Number of characters to write
20351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     *
20451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * @exception  IOException  If an I/O error occurs
20551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     */
20651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    public void write(char cbuf[], int off, int len) throws IOException {
20751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        se.write(cbuf, off, len);
20851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    }
20951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski
21051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    /**
21151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * Writes a portion of a string.
21251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     *
21351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * @param  str  A String
21451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * @param  off  Offset from which to start writing characters
21551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * @param  len  Number of characters to write
21651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     *
21751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * @exception  IOException  If an I/O error occurs
21851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     */
21951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    public void write(String str, int off, int len) throws IOException {
22051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        se.write(str, off, len);
22151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    }
22251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski
22351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    /**
22451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * Flushes the stream.
22551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     *
22651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * @exception  IOException  If an I/O error occurs
22751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     */
22851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    public void flush() throws IOException {
22951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        se.flush();
23051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    }
23151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski
23251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    public void close() throws IOException {
23351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        se.close();
23451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    }
23551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski}
236