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 896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 1096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 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.ByteArrayInputStream; 2096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.io.IOException; 2196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.io.InputStream; 2296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.io.InputStreamReader; 2396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.io.OutputStream; 2496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.io.OutputStreamWriter; 2596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.io.Reader; 2696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.io.StringReader; 2796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.io.Writer; 2896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 2996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project/** 3096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * This class provides static utility methods for buffered 3196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * copying between sources (<code>InputStream</code>, <code>Reader</code>, 3296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <code>String</code> and <code>byte[]</code>) and destinations 3396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * (<code>OutputStream</code>, <code>Writer</code>, <code>String</code> and 3496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <code>byte[]</code>). 3596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <p> 3696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Unless otherwise noted, these <code>copy</code> methods do <em>not</em> 3796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * flush or close the streams. Often doing so would require making non-portable 3896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * assumptions about the streams' origin and further use. This means that both 3996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * streams' <code>close()</code> methods must be called after copying. if one 4096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * omits this step, then the stream resources (sockets, file descriptors) are 4196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * released when the associated Stream is garbage-collected. It is not a good 4296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * idea to rely on this mechanism. For a good overview of the distinction 4396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * between "memory management" and "resource management", see 4496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <a href="http://www.unixreview.com/articles/1998/9804/9804ja/ja.htm">this 4596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * UnixReview article</a>. 4696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <p> 4796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * For byte-to-char methods, a <code>copy</code> variant allows the encoding 4896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * to be selected (otherwise the platform default is used). We would like to 4996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * encourage you to always specify the encoding because relying on the platform 5096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * default can lead to unexpected results. 5196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <p 5296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * We don't provide special variants for the <code>copy</code> methods that 5396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * let you specify the buffer size because in modern VMs the impact on speed 5496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * seems to be minimal. We're using a default buffer size of 4 KB. 5596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <p> 5696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * The <code>copy</code> methods use an internal buffer when copying. It is 5796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * therefore advisable <em>not</em> to deliberately wrap the stream arguments 5896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * to the <code>copy</code> methods in <code>Buffered*</code> streams. For 5996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * example, don't do the following: 6096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <pre> 6196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * copy( new BufferedInputStream( in ), new BufferedOutputStream( out ) ); 6296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * </pre> 6396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * The rationale is as follows: 6496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <p> 6596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Imagine that an InputStream's read() is a very expensive operation, which 6696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * would usually suggest wrapping in a BufferedInputStream. The 6796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * BufferedInputStream works by issuing infrequent 6896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * {@link java.io.InputStream#read(byte[] b, int off, int len)} requests on the 6996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * underlying InputStream, to fill an internal buffer, from which further 7096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <code>read</code> requests can inexpensively get their data (until the buffer 7196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * runs out). 7296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <p> 7396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * However, the <code>copy</code> methods do the same thing, keeping an 7496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * internal buffer, populated by 7596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * {@link InputStream#read(byte[] b, int off, int len)} requests. Having two 7696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * buffers (or three if the destination stream is also buffered) is pointless, 7796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * and the unnecessary buffer management hurts performance slightly (about 3%, 7896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * according to some simple experiments). 7996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <p> 8096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Behold, intrepid explorers; a map of this class: 8196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <pre> 8296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Method Input Output Dependency 8396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * ------ ----- ------ ------- 8496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 1 copy InputStream OutputStream (primitive) 8596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 2 copy Reader Writer (primitive) 8696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 8796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 3 copy InputStream Writer 2 8896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 8996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 4 copy Reader OutputStream 2 9096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 9196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 5 copy String OutputStream 2 9296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 6 copy String Writer (trivial) 9396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 9496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 7 copy byte[] Writer 3 9596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 8 copy byte[] OutputStream (trivial) 9696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * </pre> 9796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <p> 9896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Note that only the first two methods shuffle bytes; the rest use these 9996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * two, or (if possible) copy using native Java copy methods. As there are 10096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * method variants to specify the encoding, each row may 10196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * correspond to up to 2 methods. 10296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <p> 10396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Origin of code: Excalibur. 10496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 10596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @author Peter Donald 10696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @author Jeff Turner 10796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @author Matthew Hawthorne 10896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @version $Id: CopyUtils.java 437680 2006-08-28 11:57:00Z scolebourne $ 10996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @deprecated Use IOUtils. Will be removed in 2.0. 11096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Methods renamed to IOUtils.write() or IOUtils.copy(). 11196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Null handling behaviour changed in IOUtils (null data does not 11296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * throw NullPointerException). 11396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 11496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectpublic class CopyUtils { 11596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 11696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 11796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * The default size of the buffer. 11896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 11996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project private static final int DEFAULT_BUFFER_SIZE = 1024 * 4; 12096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 12196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 12296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Instances should NOT be constructed in standard programming. 12396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 12496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public CopyUtils() { } 12596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 12696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // ---------------------------------------------------------------- 12796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // byte[] -> OutputStream 12896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // ---------------------------------------------------------------- 12996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 13096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 13196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Copy bytes from a <code>byte[]</code> to an <code>OutputStream</code>. 13296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param input the byte array to read from 13396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param output the <code>OutputStream</code> to write to 13496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @throws IOException In case of an I/O problem 13596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 13696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public static void copy(byte[] input, OutputStream output) 13796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project throws IOException { 13896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project output.write(input); 13996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 14096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 14196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // ---------------------------------------------------------------- 14296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // byte[] -> Writer 14396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // ---------------------------------------------------------------- 14496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 14596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 14696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Copy and convert bytes from a <code>byte[]</code> to chars on a 14796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <code>Writer</code>. 14896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * The platform's default encoding is used for the byte-to-char conversion. 14996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param input the byte array to read from 15096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param output the <code>Writer</code> to write to 15196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @throws IOException In case of an I/O problem 15296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 15396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public static void copy(byte[] input, Writer output) 15496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project throws IOException { 15596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ByteArrayInputStream in = new ByteArrayInputStream(input); 15696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project copy(in, output); 15796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 15896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 15996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 16096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 16196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Copy and convert bytes from a <code>byte[]</code> to chars on a 16296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <code>Writer</code>, using the specified encoding. 16396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param input the byte array to read from 16496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param output the <code>Writer</code> to write to 16596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param encoding The name of a supported character encoding. See the 16696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <a href="http://www.iana.org/assignments/character-sets">IANA 16796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Charset Registry</a> for a list of valid encoding types. 16896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @throws IOException In case of an I/O problem 16996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 17096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public static void copy( 17196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project byte[] input, 17296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project Writer output, 17396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project String encoding) 17496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project throws IOException { 17596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ByteArrayInputStream in = new ByteArrayInputStream(input); 17696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project copy(in, output, encoding); 17796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 17896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 17996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 18096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // ---------------------------------------------------------------- 18196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // Core copy methods 18296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // ---------------------------------------------------------------- 18396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 18496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 18596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Copy bytes from an <code>InputStream</code> to an 18696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <code>OutputStream</code>. 18796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param input the <code>InputStream</code> to read from 18896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param output the <code>OutputStream</code> to write to 18996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @return the number of bytes copied 19096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @throws IOException In case of an I/O problem 19196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 19296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public static int copy( 19396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project InputStream input, 19496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project OutputStream output) 19596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project throws IOException { 19696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project byte[] buffer = new byte[DEFAULT_BUFFER_SIZE]; 19796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project int count = 0; 19896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project int n = 0; 19996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project while (-1 != (n = input.read(buffer))) { 20096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project output.write(buffer, 0, n); 20196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project count += n; 20296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 20396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project return count; 20496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 20596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 20696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // ---------------------------------------------------------------- 20796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // Reader -> Writer 20896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // ---------------------------------------------------------------- 20996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 21096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 21196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Copy chars from a <code>Reader</code> to a <code>Writer</code>. 21296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param input the <code>Reader</code> to read from 21396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param output the <code>Writer</code> to write to 21496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @return the number of characters copied 21596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @throws IOException In case of an I/O problem 21696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 21796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public static int copy( 21896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project Reader input, 21996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project Writer output) 22096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project throws IOException { 22196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project char[] buffer = new char[DEFAULT_BUFFER_SIZE]; 22296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project int count = 0; 22396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project int n = 0; 22496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project while (-1 != (n = input.read(buffer))) { 22596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project output.write(buffer, 0, n); 22696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project count += n; 22796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 22896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project return count; 22996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 23096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 23196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // ---------------------------------------------------------------- 23296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // InputStream -> Writer 23396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // ---------------------------------------------------------------- 23496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 23596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 23696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Copy and convert bytes from an <code>InputStream</code> to chars on a 23796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <code>Writer</code>. 23896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * The platform's default encoding is used for the byte-to-char conversion. 23996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param input the <code>InputStream</code> to read from 24096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param output the <code>Writer</code> to write to 24196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @throws IOException In case of an I/O problem 24296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 24396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public static void copy( 24496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project InputStream input, 24596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project Writer output) 24696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project throws IOException { 24796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project InputStreamReader in = new InputStreamReader(input); 24896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project copy(in, output); 24996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 25096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 25196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 25296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Copy and convert bytes from an <code>InputStream</code> to chars on a 25396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <code>Writer</code>, using the specified encoding. 25496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param input the <code>InputStream</code> to read from 25596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param output the <code>Writer</code> to write to 25696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param encoding The name of a supported character encoding. See the 25796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <a href="http://www.iana.org/assignments/character-sets">IANA 25896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Charset Registry</a> for a list of valid encoding types. 25996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @throws IOException In case of an I/O problem 26096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 26196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public static void copy( 26296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project InputStream input, 26396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project Writer output, 26496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project String encoding) 26596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project throws IOException { 26696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project InputStreamReader in = new InputStreamReader(input, encoding); 26796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project copy(in, output); 26896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 26996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 27096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 27196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // ---------------------------------------------------------------- 27296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // Reader -> OutputStream 27396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // ---------------------------------------------------------------- 27496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 27596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 27696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Serialize chars from a <code>Reader</code> to bytes on an 27796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <code>OutputStream</code>, and flush the <code>OutputStream</code>. 27896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param input the <code>Reader</code> to read from 27996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param output the <code>OutputStream</code> to write to 28096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @throws IOException In case of an I/O problem 28196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 28296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public static void copy( 28396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project Reader input, 28496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project OutputStream output) 28596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project throws IOException { 28696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project OutputStreamWriter out = new OutputStreamWriter(output); 28796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project copy(input, out); 28896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // XXX Unless anyone is planning on rewriting OutputStreamWriter, we 28996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // have to flush here. 29096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project out.flush(); 29196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 29296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 29396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // ---------------------------------------------------------------- 29496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // String -> OutputStream 29596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // ---------------------------------------------------------------- 29696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 29796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 29896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Serialize chars from a <code>String</code> to bytes on an 29996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <code>OutputStream</code>, and 30096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * flush the <code>OutputStream</code>. 30196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param input the <code>String</code> to read from 30296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param output the <code>OutputStream</code> to write to 30396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @throws IOException In case of an I/O problem 30496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 30596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public static void copy( 30696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project String input, 30796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project OutputStream output) 30896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project throws IOException { 30996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project StringReader in = new StringReader(input); 31096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project OutputStreamWriter out = new OutputStreamWriter(output); 31196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project copy(in, out); 31296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // XXX Unless anyone is planning on rewriting OutputStreamWriter, we 31396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // have to flush here. 31496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project out.flush(); 31596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 31696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 31796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // ---------------------------------------------------------------- 31896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // String -> Writer 31996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // ---------------------------------------------------------------- 32096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 32196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 32296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Copy chars from a <code>String</code> to a <code>Writer</code>. 32396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param input the <code>String</code> to read from 32496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param output the <code>Writer</code> to write to 32596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @throws IOException In case of an I/O problem 32696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 32796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public static void copy(String input, Writer output) 32896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project throws IOException { 32996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project output.write(input); 33096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 33196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 33296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project} 333