/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements. See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache license, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the license for the specific language governing permissions and
 * limitations under the license.
 */
package org.apache.logging.log4j.core.util;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Reader;
import java.io.Writer;

Copied from Apache Commons IO revision 1686747.
/** * Copied from Apache Commons IO revision 1686747. */
public class IOUtils {
The default buffer size (4096) to use for copyLarge(Reader, Writer) and copyLarge(Reader, Writer)
/** * The default buffer size ({@value}) to use for * {@link #copyLarge(InputStream, OutputStream)} * and * {@link #copyLarge(Reader, Writer)} */
private static final int DEFAULT_BUFFER_SIZE = 1024 * 4;
Represents the end-of-file (or stream).
/** * Represents the end-of-file (or stream). */
public static final int EOF = -1;
Copies chars from a Reader to a Writer.

This method buffers the input internally, so there is no need to use a BufferedReader.

Large streams (over 2GB) will return a chars copied value of -1 after the copy has completed since the correct number of chars cannot be returned as an int. For large streams use the copyLarge(Reader, Writer) method.
Params:
  • input – the Reader to read from
  • output – the Writer to write to
Throws:
Returns:the number of characters copied, or -1 if > Integer.MAX_VALUE
Since:1.1
/** * Copies chars from a <code>Reader</code> to a <code>Writer</code>. * <p/> * This method buffers the input internally, so there is no need to use a * <code>BufferedReader</code>. * <p/> * Large streams (over 2GB) will return a chars copied value of * <code>-1</code> after the copy has completed since the correct * number of chars cannot be returned as an int. For large streams * use the <code>copyLarge(Reader, Writer)</code> method. * * @param input the <code>Reader</code> to read from * @param output the <code>Writer</code> to write to * @return the number of characters copied, or -1 if &gt; Integer.MAX_VALUE * @throws NullPointerException if the input or output is null * @throws IOException if an I/O error occurs * @since 1.1 */
public static int copy(final Reader input, final Writer output) throws IOException { final long count = copyLarge(input, output); if (count > Integer.MAX_VALUE) { return -1; } return (int) count; }
Copies chars from a large (over 2GB) Reader to a Writer.

This method buffers the input internally, so there is no need to use a BufferedReader.

The buffer size is given by DEFAULT_BUFFER_SIZE.
Params:
  • input – the Reader to read from
  • output – the Writer to write to
Throws:
Returns:the number of characters copied
Since:1.3
/** * Copies chars from a large (over 2GB) <code>Reader</code> to a <code>Writer</code>. * <p/> * This method buffers the input internally, so there is no need to use a * <code>BufferedReader</code>. * <p/> * The buffer size is given by {@link #DEFAULT_BUFFER_SIZE}. * * @param input the <code>Reader</code> to read from * @param output the <code>Writer</code> to write to * @return the number of characters copied * @throws NullPointerException if the input or output is null * @throws IOException if an I/O error occurs * @since 1.3 */
public static long copyLarge(final Reader input, final Writer output) throws IOException { return copyLarge(input, output, new char[DEFAULT_BUFFER_SIZE]); }
Copies chars from a large (over 2GB) Reader to a Writer.

This method uses the provided buffer, so there is no need to use a BufferedReader.

Params:
  • input – the Reader to read from
  • output – the Writer to write to
  • buffer – the buffer to be used for the copy
Throws:
Returns:the number of characters copied
Since:2.2
/** * Copies chars from a large (over 2GB) <code>Reader</code> to a <code>Writer</code>. * <p/> * This method uses the provided buffer, so there is no need to use a * <code>BufferedReader</code>. * <p/> * * @param input the <code>Reader</code> to read from * @param output the <code>Writer</code> to write to * @param buffer the buffer to be used for the copy * @return the number of characters copied * @throws NullPointerException if the input or output is null * @throws IOException if an I/O error occurs * @since 2.2 */
public static long copyLarge(final Reader input, final Writer output, final char[] buffer) throws IOException { long count = 0; int n; while (EOF != (n = input.read(buffer))) { output.write(buffer, 0, n); count += n; } return count; }
Gets the contents of a Reader as a String.

This method buffers the input internally, so there is no need to use a BufferedReader.
Params:
  • input – the Reader to read from
Throws:
Returns:the requested String
/** * Gets the contents of a <code>Reader</code> as a String. * <p/> * This method buffers the input internally, so there is no need to use a * <code>BufferedReader</code>. * * @param input the <code>Reader</code> to read from * @return the requested String * @throws NullPointerException if the input is null * @throws IOException if an I/O error occurs */
public static String toString(final Reader input) throws IOException { final StringBuilderWriter sw = new StringBuilderWriter(); copy(input, sw); return sw.toString(); } }