196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project/*
296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more
396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * contributor license agreements.  See the NOTICE file distributed with
496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * this work for additional information regarding copyright ownership.
596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0
696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * (the "License"); you may not use this file except in compliance with
796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * the License.  You may obtain a copy of the License at
844de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy *
996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
1044de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy *
1196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
1296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
1396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * See the License for the specific language governing permissions and
1596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * limitations under the License.
1696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */
1796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectpackage org.apache.commons.io;
1896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
1996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.io.BufferedInputStream;
2096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.io.BufferedReader;
2196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.io.ByteArrayInputStream;
2296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.io.CharArrayWriter;
2396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.io.File;
2496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.io.IOException;
2596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.io.InputStream;
2696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.io.InputStreamReader;
2796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.io.OutputStream;
2896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.io.OutputStreamWriter;
2996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.io.PrintWriter;
3096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.io.Reader;
3196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.io.StringWriter;
3296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.io.Writer;
3396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.util.ArrayList;
3496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.util.Collection;
3596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.util.Iterator;
3696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.util.List;
3796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
3896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport org.apache.commons.io.output.ByteArrayOutputStream;
3996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
4096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project/**
4196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * General IO stream manipulation utilities.
4296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <p>
4396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * This class provides static utility methods for input/output operations.
4496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <ul>
4596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <li>closeQuietly - these methods close a stream ignoring nulls and exceptions
4696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <li>toXxx/read - these methods read data from a stream
4796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <li>write - these methods write data to a stream
4896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <li>copy - these methods copy all the data from one stream to another
4996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <li>contentEquals - these methods compare the content of two streams
5096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * </ul>
5196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <p>
5296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * The byte-to-char methods and char-to-byte methods involve a conversion step.
5396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Two methods are provided in each case, one that uses the platform default
5496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * encoding and the other which allows you to specify an encoding. You are
5596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * encouraged to always specify an encoding because relying on the platform
5696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * default can lead to unexpected results, for example when moving from
5796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * development to production.
5896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <p>
5996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * All the methods in this class that read a stream are buffered internally.
6096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * This means that there is no cause to use a <code>BufferedInputStream</code>
6196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * or <code>BufferedReader</code>. The default buffer size of 4K has been shown
6296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * to be efficient in tests.
6396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <p>
6496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Wherever possible, the methods in this class do <em>not</em> flush or close
6596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * the stream. This is to avoid making non-portable assumptions about the
6696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * streams' origin and further use. Thus the caller is still responsible for
6796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * closing streams after use.
6896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <p>
6996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Origin of code: Excalibur.
7096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project *
7196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @author Peter Donald
7296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @author Jeff Turner
7396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @author Matthew Hawthorne
7496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @author Stephen Colebourne
7596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @author Gareth Davis
7696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @author Ian Springer
7796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @author Niall Pemberton
7896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @author Sandy McArthur
7996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @version $Id: IOUtils.java 481854 2006-12-03 18:30:07Z scolebourne $
8096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */
8196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectpublic class IOUtils {
8296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    // NOTE: This class is focussed on InputStream, OutputStream, Reader and
8396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    // Writer. Each method should take at least one of these as a parameter,
8496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    // or return one of them.
8596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
8696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
8796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * The Unix directory separator character.
8896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
8996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static final char DIR_SEPARATOR_UNIX = '/';
9096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
9196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * The Windows directory separator character.
9296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
9396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static final char DIR_SEPARATOR_WINDOWS = '\\';
9496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
9596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * The system directory separator character.
9696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
9796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static final char DIR_SEPARATOR = File.separatorChar;
9896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
9996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * The Unix line separator string.
10096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
10196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static final String LINE_SEPARATOR_UNIX = "\n";
10296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
10396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * The Windows line separator string.
10496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
10596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static final String LINE_SEPARATOR_WINDOWS = "\r\n";
10696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
10796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * The system line separator string.
10896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
10996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static final String LINE_SEPARATOR;
11096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    static {
11196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        // avoid security issues
11296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        StringWriter buf = new StringWriter(4);
11396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        PrintWriter out = new PrintWriter(buf);
11496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        out.println();
11596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        LINE_SEPARATOR = buf.toString();
11696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
11796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
11896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
11996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * The default buffer size to use.
12096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
12196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    private static final int DEFAULT_BUFFER_SIZE = 1024 * 4;
12296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
12396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
12496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Instances should NOT be constructed in standard programming.
12596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
12696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public IOUtils() {
12796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        super();
12896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
12996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
13096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    //-----------------------------------------------------------------------
13196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
13296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Unconditionally close an <code>Reader</code>.
13396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
13496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Equivalent to {@link Reader#close()}, except any exceptions will be ignored.
13596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * This is typically used in finally blocks.
13696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
13796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param input  the Reader to close, may be null or already closed
13896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
13996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static void closeQuietly(Reader input) {
14096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        try {
14196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            if (input != null) {
14296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                input.close();
14396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            }
14496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        } catch (IOException ioe) {
14596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            // ignore
14696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
14796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
14896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
14996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
15096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Unconditionally close a <code>Writer</code>.
15196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
15296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Equivalent to {@link Writer#close()}, except any exceptions will be ignored.
15396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * This is typically used in finally blocks.
15496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
15596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param output  the Writer to close, may be null or already closed
15696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
15796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static void closeQuietly(Writer output) {
15896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        try {
15996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            if (output != null) {
16096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                output.close();
16196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            }
16296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        } catch (IOException ioe) {
16396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            // ignore
16496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
16596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
16696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
16796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
16896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Unconditionally close an <code>InputStream</code>.
16996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
17096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Equivalent to {@link InputStream#close()}, except any exceptions will be ignored.
17196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * This is typically used in finally blocks.
17296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
17396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param input  the InputStream to close, may be null or already closed
17496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
17596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static void closeQuietly(InputStream input) {
17696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        try {
17796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            if (input != null) {
17896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                input.close();
17996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            }
18096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        } catch (IOException ioe) {
18196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            // ignore
18296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
18396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
18496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
18596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
18696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Unconditionally close an <code>OutputStream</code>.
18796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
18896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Equivalent to {@link OutputStream#close()}, except any exceptions will be ignored.
18996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * This is typically used in finally blocks.
19096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
19196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param output  the OutputStream to close, may be null or already closed
19296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
19396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static void closeQuietly(OutputStream output) {
19496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        try {
19596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            if (output != null) {
19696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                output.close();
19796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            }
19896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        } catch (IOException ioe) {
19996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            // ignore
20096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
20196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
20296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
20396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    // read toByteArray
20496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    //-----------------------------------------------------------------------
20596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
20696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Get the contents of an <code>InputStream</code> as a <code>byte[]</code>.
20796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
20896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * This method buffers the input internally, so there is no need to use a
20996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <code>BufferedInputStream</code>.
21044de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy     *
21196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param input  the <code>InputStream</code> to read from
21296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return the requested byte array
21396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws NullPointerException if the input is null
21496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IOException if an I/O error occurs
21596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
21696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static byte[] toByteArray(InputStream input) throws IOException {
21796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        ByteArrayOutputStream output = new ByteArrayOutputStream();
21896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        copy(input, output);
21996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return output.toByteArray();
22096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
22196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
22296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
22396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Get the contents of a <code>Reader</code> as a <code>byte[]</code>
22496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * using the default character encoding of the platform.
22596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
22696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * This method buffers the input internally, so there is no need to use a
22796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <code>BufferedReader</code>.
22844de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy     *
22996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param input  the <code>Reader</code> to read from
23096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return the requested byte array
23196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws NullPointerException if the input is null
23296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IOException if an I/O error occurs
23396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
23496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static byte[] toByteArray(Reader input) throws IOException {
23596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        ByteArrayOutputStream output = new ByteArrayOutputStream();
23696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        copy(input, output);
23796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return output.toByteArray();
23896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
23996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
24096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
24196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Get the contents of a <code>Reader</code> as a <code>byte[]</code>
24296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * using the specified character encoding.
24396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
24496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Character encoding names can be found at
24596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <a href="http://www.iana.org/assignments/character-sets">IANA</a>.
24696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
24796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * This method buffers the input internally, so there is no need to use a
24896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <code>BufferedReader</code>.
24944de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy     *
25096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param input  the <code>Reader</code> to read from
25196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param encoding  the encoding to use, null means platform default
25296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return the requested byte array
25396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws NullPointerException if the input is null
25496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IOException if an I/O error occurs
25596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.1
25696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
25796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static byte[] toByteArray(Reader input, String encoding)
25896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            throws IOException {
25996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        ByteArrayOutputStream output = new ByteArrayOutputStream();
26096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        copy(input, output, encoding);
26196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return output.toByteArray();
26296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
26396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
26496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
26596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Get the contents of a <code>String</code> as a <code>byte[]</code>
26696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * using the default character encoding of the platform.
26796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
26896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * This is the same as {@link String#getBytes()}.
26944de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy     *
27096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param input  the <code>String</code> to convert
27196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return the requested byte array
27296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws NullPointerException if the input is null
27396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IOException if an I/O error occurs (never occurs)
27496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @deprecated Use {@link String#getBytes()}
27596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
27696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static byte[] toByteArray(String input) throws IOException {
27796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return input.getBytes();
27896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
27996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
28096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    // read char[]
28196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    //-----------------------------------------------------------------------
28296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
28396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Get the contents of an <code>InputStream</code> as a character array
28496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * using the default character encoding of the platform.
28596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
28696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * This method buffers the input internally, so there is no need to use a
28796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <code>BufferedInputStream</code>.
28844de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy     *
28996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param is  the <code>InputStream</code> to read from
29096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return the requested character array
29196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws NullPointerException if the input is null
29296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IOException if an I/O error occurs
29396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.1
29496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
29596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static char[] toCharArray(InputStream is) throws IOException {
29696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        CharArrayWriter output = new CharArrayWriter();
29796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        copy(is, output);
29896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return output.toCharArray();
29996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
30096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
30196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
30296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Get the contents of an <code>InputStream</code> as a character array
30396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * using the specified character encoding.
30496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
30596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Character encoding names can be found at
30696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <a href="http://www.iana.org/assignments/character-sets">IANA</a>.
30796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
30896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * This method buffers the input internally, so there is no need to use a
30996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <code>BufferedInputStream</code>.
31044de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy     *
31196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param is  the <code>InputStream</code> to read from
31296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param encoding  the encoding to use, null means platform default
31396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return the requested character array
31496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws NullPointerException if the input is null
31596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IOException if an I/O error occurs
31696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.1
31796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
31896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static char[] toCharArray(InputStream is, String encoding)
31996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            throws IOException {
32096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        CharArrayWriter output = new CharArrayWriter();
32196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        copy(is, output, encoding);
32296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return output.toCharArray();
32396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
32496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
32596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
32696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Get the contents of a <code>Reader</code> as a character array.
32796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
32896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * This method buffers the input internally, so there is no need to use a
32996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <code>BufferedReader</code>.
33044de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy     *
33196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param input  the <code>Reader</code> to read from
33296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return the requested character array
33396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws NullPointerException if the input is null
33496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IOException if an I/O error occurs
33596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.1
33696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
33796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static char[] toCharArray(Reader input) throws IOException {
33896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        CharArrayWriter sw = new CharArrayWriter();
33996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        copy(input, sw);
34096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return sw.toCharArray();
34196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
34296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
34396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    // read toString
34496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    //-----------------------------------------------------------------------
34596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
34696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Get the contents of an <code>InputStream</code> as a String
34796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * using the default character encoding of the platform.
34896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
34996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * This method buffers the input internally, so there is no need to use a
35096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <code>BufferedInputStream</code>.
35144de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy     *
35296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param input  the <code>InputStream</code> to read from
35396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return the requested String
35496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws NullPointerException if the input is null
35596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IOException if an I/O error occurs
35696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
35796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static String toString(InputStream input) throws IOException {
35896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        StringWriter sw = new StringWriter();
35996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        copy(input, sw);
36096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return sw.toString();
36196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
36296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
36396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
36496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Get the contents of an <code>InputStream</code> as a String
36596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * using the specified character encoding.
36696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
36796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Character encoding names can be found at
36896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <a href="http://www.iana.org/assignments/character-sets">IANA</a>.
36996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
37096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * This method buffers the input internally, so there is no need to use a
37196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <code>BufferedInputStream</code>.
37244de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy     *
37396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param input  the <code>InputStream</code> to read from
37496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param encoding  the encoding to use, null means platform default
37596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return the requested String
37696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws NullPointerException if the input is null
37796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IOException if an I/O error occurs
37896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
37996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static String toString(InputStream input, String encoding)
38096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            throws IOException {
38196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        StringWriter sw = new StringWriter();
38296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        copy(input, sw, encoding);
38396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return sw.toString();
38496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
38596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
38696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
38796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Get the contents of a <code>Reader</code> as a String.
38896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
38996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * This method buffers the input internally, so there is no need to use a
39096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <code>BufferedReader</code>.
39144de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy     *
39296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param input  the <code>Reader</code> to read from
39396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return the requested String
39496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws NullPointerException if the input is null
39596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IOException if an I/O error occurs
39696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
39796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static String toString(Reader input) throws IOException {
39896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        StringWriter sw = new StringWriter();
39996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        copy(input, sw);
40096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return sw.toString();
40196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
40296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
40396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
40496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Get the contents of a <code>byte[]</code> as a String
40596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * using the default character encoding of the platform.
40644de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy     *
40796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param input the byte array to read from
40896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return the requested String
40996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws NullPointerException if the input is null
41096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IOException if an I/O error occurs (never occurs)
41196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @deprecated Use {@link String#String(byte[])}
41296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
41396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static String toString(byte[] input) throws IOException {
41496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return new String(input);
41596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
41696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
41796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
41896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Get the contents of a <code>byte[]</code> as a String
41996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * using the specified character encoding.
42096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
42196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Character encoding names can be found at
42296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <a href="http://www.iana.org/assignments/character-sets">IANA</a>.
42344de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy     *
42496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param input the byte array to read from
42596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param encoding  the encoding to use, null means platform default
42696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return the requested String
42796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws NullPointerException if the input is null
42896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IOException if an I/O error occurs (never occurs)
42996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @deprecated Use {@link String#String(byte[],String)}
43096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
43196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static String toString(byte[] input, String encoding)
43296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            throws IOException {
43396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (encoding == null) {
43496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            return new String(input);
43596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        } else {
43696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            return new String(input, encoding);
43796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
43896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
43996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
44096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    // readLines
44196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    //-----------------------------------------------------------------------
44296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
44396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Get the contents of an <code>InputStream</code> as a list of Strings,
44496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * one entry per line, using the default character encoding of the platform.
44596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
44696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * This method buffers the input internally, so there is no need to use a
44796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <code>BufferedInputStream</code>.
44896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
44996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param input  the <code>InputStream</code> to read from, not null
45096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return the list of Strings, never null
45196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws NullPointerException if the input is null
45296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IOException if an I/O error occurs
45396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.1
45496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
45544de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy    public static List<String> readLines(InputStream input) throws IOException {
45696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        InputStreamReader reader = new InputStreamReader(input);
45796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return readLines(reader);
45896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
45996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
46096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
46196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Get the contents of an <code>InputStream</code> as a list of Strings,
46296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * one entry per line, using the specified character encoding.
46396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
46496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Character encoding names can be found at
46596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <a href="http://www.iana.org/assignments/character-sets">IANA</a>.
46696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
46796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * This method buffers the input internally, so there is no need to use a
46896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <code>BufferedInputStream</code>.
46996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
47096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param input  the <code>InputStream</code> to read from, not null
47196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param encoding  the encoding to use, null means platform default
47296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return the list of Strings, never null
47396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws NullPointerException if the input is null
47496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IOException if an I/O error occurs
47596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.1
47696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
47744de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy    public static List<String> readLines(InputStream input, String encoding) throws IOException {
47896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (encoding == null) {
47996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            return readLines(input);
48096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        } else {
48196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            InputStreamReader reader = new InputStreamReader(input, encoding);
48296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            return readLines(reader);
48396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
48496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
48596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
48696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
48796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Get the contents of a <code>Reader</code> as a list of Strings,
48896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * one entry per line.
48996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
49096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * This method buffers the input internally, so there is no need to use a
49196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <code>BufferedReader</code>.
49296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
49396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param input  the <code>Reader</code> to read from, not null
49496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return the list of Strings, never null
49596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws NullPointerException if the input is null
49696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IOException if an I/O error occurs
49796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.1
49896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
49944de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy    public static List<String> readLines(Reader input) throws IOException {
50096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        BufferedReader reader = new BufferedReader(input);
50144de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy        List<String> list = new ArrayList<String>();
50296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        String line = reader.readLine();
50396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        while (line != null) {
50496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            list.add(line);
50596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            line = reader.readLine();
50696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
50796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return list;
50896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
50996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
51096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    // lineIterator
51196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    //-----------------------------------------------------------------------
51296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
51396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Return an Iterator for the lines in a <code>Reader</code>.
51496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
51596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <code>LineIterator</code> holds a reference to the open
51696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <code>Reader</code> specified here. When you have finished with the
51796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * iterator you should close the reader to free internal resources.
51896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * This can be done by closing the reader directly, or by calling
51996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * {@link LineIterator#close()} or {@link LineIterator#closeQuietly(LineIterator)}.
52096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
52196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * The recommended usage pattern is:
52296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <pre>
52396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * try {
52496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *   LineIterator it = IOUtils.lineIterator(reader);
52596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *   while (it.hasNext()) {
52696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *     String line = it.nextLine();
52796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *     /// do something with line
52896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *   }
52996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * } finally {
53096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *   IOUtils.closeQuietly(reader);
53196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * }
53296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * </pre>
53396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
53496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param reader  the <code>Reader</code> to read from, not null
53596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return an Iterator of the lines in the reader, never null
53696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IllegalArgumentException if the reader is null
53796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.2
53896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
53996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static LineIterator lineIterator(Reader reader) {
54096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return new LineIterator(reader);
54196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
54296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
54396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
54496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Return an Iterator for the lines in an <code>InputStream</code>, using
54596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * the character encoding specified (or default encoding if null).
54696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
54796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <code>LineIterator</code> holds a reference to the open
54896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <code>InputStream</code> specified here. When you have finished with
54996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * the iterator you should close the stream to free internal resources.
55096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * This can be done by closing the stream directly, or by calling
55196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * {@link LineIterator#close()} or {@link LineIterator#closeQuietly(LineIterator)}.
55296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
55396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * The recommended usage pattern is:
55496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <pre>
55596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * try {
55696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *   LineIterator it = IOUtils.lineIterator(stream, "UTF-8");
55796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *   while (it.hasNext()) {
55896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *     String line = it.nextLine();
55996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *     /// do something with line
56096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *   }
56196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * } finally {
56296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *   IOUtils.closeQuietly(stream);
56396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * }
56496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * </pre>
56596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
56696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param input  the <code>InputStream</code> to read from, not null
56796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param encoding  the encoding to use, null means platform default
56896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return an Iterator of the lines in the reader, never null
56996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IllegalArgumentException if the input is null
57096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IOException if an I/O error occurs, such as if the encoding is invalid
57196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.2
57296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
57344de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy    public static LineIterator lineIterator(InputStream input, String encoding)
57496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                     throws IOException {
57596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        Reader reader = null;
57696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (encoding == null) {
57796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            reader = new InputStreamReader(input);
57896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        } else {
57996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            reader = new InputStreamReader(input, encoding);
58096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
58196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return new LineIterator(reader);
58296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
58396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
58496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    //-----------------------------------------------------------------------
58596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
58696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Convert the specified string to an input stream, encoded as bytes
58796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * using the default character encoding of the platform.
58896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
58996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param input the string to convert
59096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return an input stream
59196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.1
59296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
59396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static InputStream toInputStream(String input) {
59496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        byte[] bytes = input.getBytes();
59596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return new ByteArrayInputStream(bytes);
59696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
59796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
59896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
59996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Convert the specified string to an input stream, encoded as bytes
60096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * using the specified character encoding.
60196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
60296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Character encoding names can be found at
60396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <a href="http://www.iana.org/assignments/character-sets">IANA</a>.
60496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
60596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param input the string to convert
60696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param encoding the encoding to use, null means platform default
60796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IOException if the encoding is invalid
60896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return an input stream
60996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.1
61096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
61196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static InputStream toInputStream(String input, String encoding) throws IOException {
61296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        byte[] bytes = encoding != null ? input.getBytes(encoding) : input.getBytes();
61396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return new ByteArrayInputStream(bytes);
61496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
61596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
61696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    // write byte[]
61796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    //-----------------------------------------------------------------------
61896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
61996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Writes bytes from a <code>byte[]</code> to an <code>OutputStream</code>.
62044de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy     *
62196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param data  the byte array to write, do not modify during output,
62296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * null ignored
62396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param output  the <code>OutputStream</code> to write to
62496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws NullPointerException if output is null
62596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IOException if an I/O error occurs
62696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.1
62796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
62896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static void write(byte[] data, OutputStream output)
62996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            throws IOException {
63096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (data != null) {
63196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            output.write(data);
63296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
63396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
63496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
63596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
63696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Writes bytes from a <code>byte[]</code> to chars on a <code>Writer</code>
63796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * using the default character encoding of the platform.
63896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
63996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * This method uses {@link String#String(byte[])}.
64044de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy     *
64196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param data  the byte array to write, do not modify during output,
64296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * null ignored
64396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param output  the <code>Writer</code> to write to
64496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws NullPointerException if output is null
64596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IOException if an I/O error occurs
64696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.1
64796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
64896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static void write(byte[] data, Writer output) throws IOException {
64996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (data != null) {
65096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            output.write(new String(data));
65196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
65296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
65396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
65496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
65596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Writes bytes from a <code>byte[]</code> to chars on a <code>Writer</code>
65696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * using the specified character encoding.
65796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
65896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Character encoding names can be found at
65996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <a href="http://www.iana.org/assignments/character-sets">IANA</a>.
66096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
66196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * This method uses {@link String#String(byte[], String)}.
66244de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy     *
66396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param data  the byte array to write, do not modify during output,
66496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * null ignored
66596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param output  the <code>Writer</code> to write to
66696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param encoding  the encoding to use, null means platform default
66796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws NullPointerException if output is null
66896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IOException if an I/O error occurs
66996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.1
67096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
67196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static void write(byte[] data, Writer output, String encoding)
67296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            throws IOException {
67396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (data != null) {
67496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            if (encoding == null) {
67596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                write(data, output);
67696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            } else {
67796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                output.write(new String(data, encoding));
67896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            }
67996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
68096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
68196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
68296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    // write char[]
68396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    //-----------------------------------------------------------------------
68496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
68596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Writes chars from a <code>char[]</code> to a <code>Writer</code>
68696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * using the default character encoding of the platform.
68744de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy     *
68896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param data  the char array to write, do not modify during output,
68996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * null ignored
69096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param output  the <code>Writer</code> to write to
69196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws NullPointerException if output is null
69296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IOException if an I/O error occurs
69396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.1
69496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
69596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static void write(char[] data, Writer output) throws IOException {
69696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (data != null) {
69796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            output.write(data);
69896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
69996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
70096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
70196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
70296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Writes chars from a <code>char[]</code> to bytes on an
70396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <code>OutputStream</code>.
70496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
70596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * This method uses {@link String#String(char[])} and
70696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * {@link String#getBytes()}.
70744de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy     *
70896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param data  the char array to write, do not modify during output,
70996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * null ignored
71096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param output  the <code>OutputStream</code> to write to
71196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws NullPointerException if output is null
71296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IOException if an I/O error occurs
71396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.1
71496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
71596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static void write(char[] data, OutputStream output)
71696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            throws IOException {
71796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (data != null) {
71896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            output.write(new String(data).getBytes());
71996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
72096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
72196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
72296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
72396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Writes chars from a <code>char[]</code> to bytes on an
72496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <code>OutputStream</code> using the specified character encoding.
72596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
72696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Character encoding names can be found at
72796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <a href="http://www.iana.org/assignments/character-sets">IANA</a>.
72896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
72996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * This method uses {@link String#String(char[])} and
73096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * {@link String#getBytes(String)}.
73144de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy     *
73296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param data  the char array to write, do not modify during output,
73396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * null ignored
73496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param output  the <code>OutputStream</code> to write to
73596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param encoding  the encoding to use, null means platform default
73696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws NullPointerException if output is null
73796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IOException if an I/O error occurs
73896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.1
73996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
74096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static void write(char[] data, OutputStream output, String encoding)
74196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            throws IOException {
74296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (data != null) {
74396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            if (encoding == null) {
74496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                write(data, output);
74596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            } else {
74696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                output.write(new String(data).getBytes(encoding));
74796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            }
74896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
74996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
75096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
75196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    // write String
75296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    //-----------------------------------------------------------------------
75396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
75496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Writes chars from a <code>String</code> to a <code>Writer</code>.
75544de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy     *
75696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param data  the <code>String</code> to write, null ignored
75796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param output  the <code>Writer</code> to write to
75896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws NullPointerException if output is null
75996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IOException if an I/O error occurs
76096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.1
76196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
76296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static void write(String data, Writer output) throws IOException {
76396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (data != null) {
76496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            output.write(data);
76596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
76696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
76796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
76896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
76996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Writes chars from a <code>String</code> to bytes on an
77096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <code>OutputStream</code> using the default character encoding of the
77196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * platform.
77296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
77396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * This method uses {@link String#getBytes()}.
77444de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy     *
77596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param data  the <code>String</code> to write, null ignored
77696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param output  the <code>OutputStream</code> to write to
77796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws NullPointerException if output is null
77896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IOException if an I/O error occurs
77996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.1
78096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
78196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static void write(String data, OutputStream output)
78296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            throws IOException {
78396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (data != null) {
78496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            output.write(data.getBytes());
78596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
78696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
78796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
78896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
78996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Writes chars from a <code>String</code> to bytes on an
79096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <code>OutputStream</code> using the specified character encoding.
79196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
79296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Character encoding names can be found at
79396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <a href="http://www.iana.org/assignments/character-sets">IANA</a>.
79496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
79596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * This method uses {@link String#getBytes(String)}.
79644de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy     *
79796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param data  the <code>String</code> to write, null ignored
79896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param output  the <code>OutputStream</code> to write to
79996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param encoding  the encoding to use, null means platform default
80096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws NullPointerException if output is null
80196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IOException if an I/O error occurs
80296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.1
80396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
80496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static void write(String data, OutputStream output, String encoding)
80596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            throws IOException {
80696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (data != null) {
80796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            if (encoding == null) {
80896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                write(data, output);
80996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            } else {
81096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                output.write(data.getBytes(encoding));
81196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            }
81296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
81396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
81496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
81596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    // write StringBuffer
81696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    //-----------------------------------------------------------------------
81796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
81896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Writes chars from a <code>StringBuffer</code> to a <code>Writer</code>.
81944de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy     *
82096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param data  the <code>StringBuffer</code> to write, null ignored
82196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param output  the <code>Writer</code> to write to
82296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws NullPointerException if output is null
82396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IOException if an I/O error occurs
82496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.1
82596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
82696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static void write(StringBuffer data, Writer output)
82796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            throws IOException {
82896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (data != null) {
82996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            output.write(data.toString());
83096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
83196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
83296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
83396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
83496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Writes chars from a <code>StringBuffer</code> to bytes on an
83596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <code>OutputStream</code> using the default character encoding of the
83696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * platform.
83796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
83896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * This method uses {@link String#getBytes()}.
83944de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy     *
84096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param data  the <code>StringBuffer</code> to write, null ignored
84196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param output  the <code>OutputStream</code> to write to
84296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws NullPointerException if output is null
84396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IOException if an I/O error occurs
84496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.1
84596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
84696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static void write(StringBuffer data, OutputStream output)
84796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            throws IOException {
84896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (data != null) {
84996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            output.write(data.toString().getBytes());
85096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
85196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
85296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
85396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
85496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Writes chars from a <code>StringBuffer</code> to bytes on an
85596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <code>OutputStream</code> using the specified character encoding.
85696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
85796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Character encoding names can be found at
85896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <a href="http://www.iana.org/assignments/character-sets">IANA</a>.
85996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
86096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * This method uses {@link String#getBytes(String)}.
86144de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy     *
86296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param data  the <code>StringBuffer</code> to write, null ignored
86396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param output  the <code>OutputStream</code> to write to
86496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param encoding  the encoding to use, null means platform default
86596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws NullPointerException if output is null
86696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IOException if an I/O error occurs
86796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.1
86896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
86996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static void write(StringBuffer data, OutputStream output,
87096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            String encoding) throws IOException {
87196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (data != null) {
87296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            if (encoding == null) {
87396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                write(data, output);
87496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            } else {
87596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                output.write(data.toString().getBytes(encoding));
87696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            }
87796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
87896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
87996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
88096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    // writeLines
88196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    //-----------------------------------------------------------------------
88296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
88396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Writes the <code>toString()</code> value of each item in a collection to
88496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * an <code>OutputStream</code> line by line, using the default character
88596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * encoding of the platform and the specified line ending.
88696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
88796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param lines  the lines to write, null entries produce blank lines
88896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param lineEnding  the line separator to use, null is system default
88996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param output  the <code>OutputStream</code> to write to, not null, not closed
89096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws NullPointerException if the output is null
89196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IOException if an I/O error occurs
89296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.1
89396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
89444de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy    public static void writeLines(Collection<Object> lines, String lineEnding,
89596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            OutputStream output) throws IOException {
89696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (lines == null) {
89796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            return;
89896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
89996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (lineEnding == null) {
90096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            lineEnding = LINE_SEPARATOR;
90196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
90244de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy        for (Iterator<Object> it = lines.iterator(); it.hasNext(); ) {
90396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            Object line = it.next();
90496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            if (line != null) {
90596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                output.write(line.toString().getBytes());
90696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            }
90796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            output.write(lineEnding.getBytes());
90896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
90996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
91096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
91196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
91296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Writes the <code>toString()</code> value of each item in a collection to
91396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * an <code>OutputStream</code> line by line, using the specified character
91496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * encoding and the specified line ending.
91596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
91696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Character encoding names can be found at
91796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <a href="http://www.iana.org/assignments/character-sets">IANA</a>.
91896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
91996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param lines  the lines to write, null entries produce blank lines
92096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param lineEnding  the line separator to use, null is system default
92196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param output  the <code>OutputStream</code> to write to, not null, not closed
92296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param encoding  the encoding to use, null means platform default
92396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws NullPointerException if the output is null
92496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IOException if an I/O error occurs
92596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.1
92696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
92744de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy    public static void writeLines(Collection<Object> lines, String lineEnding,
92896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            OutputStream output, String encoding) throws IOException {
92996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (encoding == null) {
93096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            writeLines(lines, lineEnding, output);
93196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        } else {
93296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            if (lines == null) {
93396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                return;
93496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            }
93596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            if (lineEnding == null) {
93696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                lineEnding = LINE_SEPARATOR;
93796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            }
93844de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy            for (Iterator<Object> it = lines.iterator(); it.hasNext(); ) {
93996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                Object line = it.next();
94096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                if (line != null) {
94196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                    output.write(line.toString().getBytes(encoding));
94296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                }
94396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                output.write(lineEnding.getBytes(encoding));
94496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            }
94596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
94696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
94796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
94896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
94996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Writes the <code>toString()</code> value of each item in a collection to
95096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * a <code>Writer</code> line by line, using the specified line ending.
95196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
95296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param lines  the lines to write, null entries produce blank lines
95396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param lineEnding  the line separator to use, null is system default
95496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param writer  the <code>Writer</code> to write to, not null, not closed
95596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws NullPointerException if the input is null
95696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IOException if an I/O error occurs
95796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.1
95896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
95944de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy    public static void writeLines(Collection<Object> lines, String lineEnding,
96096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            Writer writer) throws IOException {
96196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (lines == null) {
96296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            return;
96396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
96496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (lineEnding == null) {
96596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            lineEnding = LINE_SEPARATOR;
96696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
96744de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy        for (Iterator<Object> it = lines.iterator(); it.hasNext(); ) {
96896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            Object line = it.next();
96996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            if (line != null) {
97096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                writer.write(line.toString());
97196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            }
97296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            writer.write(lineEnding);
97396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
97496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
97596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
97696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    // copy from InputStream
97796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    //-----------------------------------------------------------------------
97896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
97996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Copy bytes from an <code>InputStream</code> to an
98096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <code>OutputStream</code>.
98196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
98296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * This method buffers the input internally, so there is no need to use a
98396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <code>BufferedInputStream</code>.
98496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
98596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Large streams (over 2GB) will return a bytes copied value of
98696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <code>-1</code> after the copy has completed since the correct
98796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * number of bytes cannot be returned as an int. For large streams
98896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * use the <code>copyLarge(InputStream, OutputStream)</code> method.
98944de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy     *
99096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param input  the <code>InputStream</code> to read from
99196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param output  the <code>OutputStream</code> to write to
99296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return the number of bytes copied
99396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws NullPointerException if the input or output is null
99496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IOException if an I/O error occurs
99596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws ArithmeticException if the byte count is too large
99696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.1
99796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
99896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static int copy(InputStream input, OutputStream output) throws IOException {
99996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        long count = copyLarge(input, output);
100096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (count > Integer.MAX_VALUE) {
100196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            return -1;
100296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
100396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return (int) count;
100496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
100596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
100696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
100796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Copy bytes from a large (over 2GB) <code>InputStream</code> to an
100896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <code>OutputStream</code>.
100996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
101096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * This method buffers the input internally, so there is no need to use a
101196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <code>BufferedInputStream</code>.
101244de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy     *
101396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param input  the <code>InputStream</code> to read from
101496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param output  the <code>OutputStream</code> to write to
101596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return the number of bytes copied
101696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws NullPointerException if the input or output is null
101796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IOException if an I/O error occurs
101896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.3
101996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
102096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static long copyLarge(InputStream input, OutputStream output)
102196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            throws IOException {
102296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
102396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        long count = 0;
102496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        int n = 0;
102596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        while (-1 != (n = input.read(buffer))) {
102696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            output.write(buffer, 0, n);
102796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            count += n;
102896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
102996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return count;
103096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
103196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
103296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
103396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Copy bytes from an <code>InputStream</code> to chars on a
103496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <code>Writer</code> using the default character encoding of the platform.
103596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
103696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * This method buffers the input internally, so there is no need to use a
103796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <code>BufferedInputStream</code>.
103896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
103996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * This method uses {@link InputStreamReader}.
104096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
104196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param input  the <code>InputStream</code> to read from
104296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param output  the <code>Writer</code> to write to
104396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws NullPointerException if the input or output is null
104496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IOException if an I/O error occurs
104596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.1
104696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
104796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static void copy(InputStream input, Writer output)
104896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            throws IOException {
104996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        InputStreamReader in = new InputStreamReader(input);
105096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        copy(in, output);
105196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
105296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
105396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
105496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Copy bytes from an <code>InputStream</code> to chars on a
105596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <code>Writer</code> using the specified character encoding.
105696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
105796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * This method buffers the input internally, so there is no need to use a
105896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <code>BufferedInputStream</code>.
105996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
106096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Character encoding names can be found at
106196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <a href="http://www.iana.org/assignments/character-sets">IANA</a>.
106296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
106396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * This method uses {@link InputStreamReader}.
106496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
106596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param input  the <code>InputStream</code> to read from
106696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param output  the <code>Writer</code> to write to
106796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param encoding  the encoding to use, null means platform default
106896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws NullPointerException if the input or output is null
106996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IOException if an I/O error occurs
107096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.1
107196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
107296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static void copy(InputStream input, Writer output, String encoding)
107396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            throws IOException {
107496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (encoding == null) {
107596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            copy(input, output);
107696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        } else {
107796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            InputStreamReader in = new InputStreamReader(input, encoding);
107896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            copy(in, output);
107996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
108096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
108196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
108296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    // copy from Reader
108396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    //-----------------------------------------------------------------------
108496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
108596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Copy chars from a <code>Reader</code> to a <code>Writer</code>.
108696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
108796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * This method buffers the input internally, so there is no need to use a
108896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <code>BufferedReader</code>.
108996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
109096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Large streams (over 2GB) will return a chars copied value of
109196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <code>-1</code> after the copy has completed since the correct
109296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * number of chars cannot be returned as an int. For large streams
109396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * use the <code>copyLarge(Reader, Writer)</code> method.
109496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
109596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param input  the <code>Reader</code> to read from
109696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param output  the <code>Writer</code> to write to
109796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return the number of characters copied
109896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws NullPointerException if the input or output is null
109996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IOException if an I/O error occurs
110096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws ArithmeticException if the character count is too large
110196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.1
110296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
110396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static int copy(Reader input, Writer output) throws IOException {
110496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        long count = copyLarge(input, output);
110596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (count > Integer.MAX_VALUE) {
110696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            return -1;
110796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
110896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return (int) count;
110996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
111096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
111196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
111296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Copy chars from a large (over 2GB) <code>Reader</code> to a <code>Writer</code>.
111396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
111496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * This method buffers the input internally, so there is no need to use a
111596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <code>BufferedReader</code>.
111696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
111796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param input  the <code>Reader</code> to read from
111896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param output  the <code>Writer</code> to write to
111996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return the number of characters copied
112096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws NullPointerException if the input or output is null
112196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IOException if an I/O error occurs
112296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.3
112396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
112496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static long copyLarge(Reader input, Writer output) throws IOException {
112596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        char[] buffer = new char[DEFAULT_BUFFER_SIZE];
112696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        long count = 0;
112796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        int n = 0;
112896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        while (-1 != (n = input.read(buffer))) {
112996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            output.write(buffer, 0, n);
113096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            count += n;
113196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
113296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return count;
113396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
113496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
113596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
113696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Copy chars from a <code>Reader</code> to bytes on an
113796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <code>OutputStream</code> using the default character encoding of the
113896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * platform, and calling flush.
113996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
114096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * This method buffers the input internally, so there is no need to use a
114196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <code>BufferedReader</code>.
114296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
114396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Due to the implementation of OutputStreamWriter, this method performs a
114496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * flush.
114596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
114696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * This method uses {@link OutputStreamWriter}.
114796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
114896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param input  the <code>Reader</code> to read from
114996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param output  the <code>OutputStream</code> to write to
115096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws NullPointerException if the input or output is null
115196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IOException if an I/O error occurs
115296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.1
115396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
115496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static void copy(Reader input, OutputStream output)
115596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            throws IOException {
115696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        OutputStreamWriter out = new OutputStreamWriter(output);
115796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        copy(input, out);
115896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        // XXX Unless anyone is planning on rewriting OutputStreamWriter, we
115996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        // have to flush here.
116096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        out.flush();
116196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
116296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
116396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
116496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Copy chars from a <code>Reader</code> to bytes on an
116596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <code>OutputStream</code> using the specified character encoding, and
116696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * calling flush.
116796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
116896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * This method buffers the input internally, so there is no need to use a
116996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <code>BufferedReader</code>.
117096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
117196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Character encoding names can be found at
117296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <a href="http://www.iana.org/assignments/character-sets">IANA</a>.
117396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
117496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Due to the implementation of OutputStreamWriter, this method performs a
117596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * flush.
117696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
117796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * This method uses {@link OutputStreamWriter}.
117896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
117996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param input  the <code>Reader</code> to read from
118096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param output  the <code>OutputStream</code> to write to
118196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param encoding  the encoding to use, null means platform default
118296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws NullPointerException if the input or output is null
118396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IOException if an I/O error occurs
118496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.1
118596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
118696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static void copy(Reader input, OutputStream output, String encoding)
118796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            throws IOException {
118896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (encoding == null) {
118996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            copy(input, output);
119096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        } else {
119196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            OutputStreamWriter out = new OutputStreamWriter(output, encoding);
119296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            copy(input, out);
119396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            // XXX Unless anyone is planning on rewriting OutputStreamWriter,
119496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            // we have to flush here.
119596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            out.flush();
119696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
119796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
119896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
119996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    // content equals
120096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    //-----------------------------------------------------------------------
120196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
120296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Compare the contents of two Streams to determine if they are equal or
120396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * not.
120496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
120596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * This method buffers the input internally using
120696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <code>BufferedInputStream</code> if they are not already buffered.
120796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
120896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param input1  the first stream
120996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param input2  the second stream
121096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return true if the content of the streams are equal or they both don't
121196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * exist, false otherwise
121296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws NullPointerException if either input is null
121396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IOException if an I/O error occurs
121496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
121596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static boolean contentEquals(InputStream input1, InputStream input2)
121696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            throws IOException {
121796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (!(input1 instanceof BufferedInputStream)) {
121896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            input1 = new BufferedInputStream(input1);
121996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
122096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (!(input2 instanceof BufferedInputStream)) {
122196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            input2 = new BufferedInputStream(input2);
122296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
122396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
122496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        int ch = input1.read();
122596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        while (-1 != ch) {
122696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            int ch2 = input2.read();
122796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            if (ch != ch2) {
122896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                return false;
122996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            }
123096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            ch = input1.read();
123196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
123296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
123396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        int ch2 = input2.read();
123496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return (ch2 == -1);
123596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
123696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
123796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
123896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Compare the contents of two Readers to determine if they are equal or
123996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * not.
124096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
124196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * This method buffers the input internally using
124296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <code>BufferedReader</code> if they are not already buffered.
124396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
124496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param input1  the first reader
124596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param input2  the second reader
124696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return true if the content of the readers are equal or they both don't
124796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * exist, false otherwise
124896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws NullPointerException if either input is null
124996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IOException if an I/O error occurs
125096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.1
125196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
125296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static boolean contentEquals(Reader input1, Reader input2)
125396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            throws IOException {
125496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (!(input1 instanceof BufferedReader)) {
125596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            input1 = new BufferedReader(input1);
125696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
125796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (!(input2 instanceof BufferedReader)) {
125896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            input2 = new BufferedReader(input2);
125996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
126096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
126196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        int ch = input1.read();
126296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        while (-1 != ch) {
126396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            int ch2 = input2.read();
126496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            if (ch != ch2) {
126596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                return false;
126696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            }
126796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            ch = input1.read();
126896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
126996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
127096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        int ch2 = input2.read();
127196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return (ch2 == -1);
127296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
127396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
127496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project}
1275