View Javadoc

    1   /*
    2    * Licensed to the Apache Software Foundation (ASF) under one or more
    3    * contributor license agreements.  See the NOTICE file distributed with
    4    * this work for additional information regarding copyright ownership.
    5    * The ASF licenses this file to You under the Apache License, Version 2.0
    6    * (the "License"); you may not use this file except in compliance with
    7    * the License.  You may obtain a copy of the License at
    8    *
    9    *      http://www.apache.org/licenses/LICENSE-2.0
    10   *
    11   * Unless required by applicable law or agreed to in writing, software
    12   * distributed under the License is distributed on an "AS IS" BASIS,
    13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14   * See the License for the specific language governing permissions and
    15   * limitations under the License.
    16   */
    17
    18  package org.apache.log4j.lf5.util;
    19
    20  import java.io.ByteArrayOutputStream;
    21  import java.io.IOException;
    22  import java.io.InputStream;
    23  import java.io.OutputStream;
    24
    25  /**
    26   * Provides utility methods for input and output streams.
    27   *
    28   * @author Richard Wan
    29   */
    30
    31  // Contributed by ThoughtWorks Inc.
    32
    33  public abstract class StreamUtils {
    34    //--------------------------------------------------------------------------
    35    //   Constants:
    36    //--------------------------------------------------------------------------
    37
    38    /**
    39     * Default value is 2048.
    40     */
    41    public static final int DEFAULT_BUFFER_SIZE = 2048;
    42
    43    //--------------------------------------------------------------------------
    44    //   Protected Variables:
    45    //--------------------------------------------------------------------------
    46
    47    //--------------------------------------------------------------------------
    48    //   Private Variables:
    49    //--------------------------------------------------------------------------
    50
    51    //--------------------------------------------------------------------------
    52    //   Constructors:
    53    //--------------------------------------------------------------------------
    54
    55    //--------------------------------------------------------------------------
    56    //   Public Methods:
    57    //--------------------------------------------------------------------------
    58
    59    /**
    60     * Copies information from the input stream to the output stream using
    61     * a default buffer size of 2048 bytes.
    62     * @throws java.io.IOException
    63     */
    64    public static void copy(InputStream input, OutputStream output)
    65        throws IOException {
    66      copy(input, output, DEFAULT_BUFFER_SIZE);
    67    }
    68
    69    /**
    70     * Copies information from the input stream to the output stream using
    71     * the specified buffer size
    72     * @throws java.io.IOException
    73     */
    74    public static void copy(InputStream input,
    75        OutputStream output,
    76        int bufferSize)
    77        throws IOException {
    78      byte[] buf = new byte[bufferSize];
    79      int bytesRead = input.read(buf);
    80      while (bytesRead != -1) {
    81        output.write(buf, 0, bytesRead);
    82        bytesRead = input.read(buf);
    83      }
    84      output.flush();
    85    }
    86
    87    /**
    88     * Copies information between specified streams and then closes
    89     * both of the streams.
    90     * @throws java.io.IOException
    91     */
    92    public static void copyThenClose(InputStream input, OutputStream output)
    93        throws IOException {
    94      copy(input, output);
    95      input.close();
    96      output.close();
    97    }
    98
    99    /**
    100    * @return a byte[] containing the information contained in the
    101    * specified InputStream.
    102    * @throws java.io.IOException
    103    */
    104   public static byte[] getBytes(InputStream input)
    105       throws IOException {
    106     ByteArrayOutputStream result = new ByteArrayOutputStream();
    107     copy(input, result);
    108     result.close();
    109     return result.toByteArray();
    110   }
    111
    112   //--------------------------------------------------------------------------
    113   //   Protected Methods:
    114   //--------------------------------------------------------------------------
    115
    116   //--------------------------------------------------------------------------
    117   //   Private Methods:
    118   //--------------------------------------------------------------------------
    119
    120   //--------------------------------------------------------------------------
    121   //   Nested Top-Level Classes or Interfaces
    122   //--------------------------------------------------------------------------
    123
    124 }