<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one or more<a name="line.2"></a>
<span class="sourceLineNo">003</span> * contributor license agreements. See the NOTICE file distributed with<a name="line.3"></a>
<span class="sourceLineNo">004</span> * this work for additional information regarding copyright ownership.<a name="line.4"></a>
<span class="sourceLineNo">005</span> * The ASF licenses this file to You under the Apache license, Version 2.0<a name="line.5"></a>
<span class="sourceLineNo">006</span> * (the "License"); you may not use this file except in compliance with<a name="line.6"></a>
<span class="sourceLineNo">007</span> * the License. You may obtain a copy of the License at<a name="line.7"></a>
<span class="sourceLineNo">008</span> *<a name="line.8"></a>
<span class="sourceLineNo">009</span> *      http://www.apache.org/licenses/LICENSE-2.0<a name="line.9"></a>
<span class="sourceLineNo">010</span> *<a name="line.10"></a>
<span class="sourceLineNo">011</span> * Unless required by applicable law or agreed to in writing, software<a name="line.11"></a>
<span class="sourceLineNo">012</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.12"></a>
<span class="sourceLineNo">013</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.13"></a>
<span class="sourceLineNo">014</span> * See the license for the specific language governing permissions and<a name="line.14"></a>
<span class="sourceLineNo">015</span> * limitations under the license.<a name="line.15"></a>
<span class="sourceLineNo">016</span> */<a name="line.16"></a>
<span class="sourceLineNo">017</span>package org.apache.logging.log4j.core.util;<a name="line.17"></a>
<span class="sourceLineNo">018</span><a name="line.18"></a>
<span class="sourceLineNo">019</span>import java.io.IOException;<a name="line.19"></a>
<span class="sourceLineNo">020</span>import java.io.InputStream;<a name="line.20"></a>
<span class="sourceLineNo">021</span>import java.io.OutputStream;<a name="line.21"></a>
<span class="sourceLineNo">022</span>import java.io.Reader;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import java.io.Writer;<a name="line.23"></a>
<span class="sourceLineNo">024</span><a name="line.24"></a>
<span class="sourceLineNo">025</span>/**<a name="line.25"></a>
<span class="sourceLineNo">026</span> * Copied from Apache Commons IO revision 1686747.<a name="line.26"></a>
<span class="sourceLineNo">027</span> */<a name="line.27"></a>
<span class="sourceLineNo">028</span>public class IOUtils {<a name="line.28"></a>
<span class="sourceLineNo">029</span><a name="line.29"></a>
<span class="sourceLineNo">030</span>    /**<a name="line.30"></a>
<span class="sourceLineNo">031</span>     * The default buffer size ({@value}) to use for<a name="line.31"></a>
<span class="sourceLineNo">032</span>     * {@link #copyLarge(InputStream, OutputStream)}<a name="line.32"></a>
<span class="sourceLineNo">033</span>     * and<a name="line.33"></a>
<span class="sourceLineNo">034</span>     * {@link #copyLarge(Reader, Writer)}<a name="line.34"></a>
<span class="sourceLineNo">035</span>     */<a name="line.35"></a>
<span class="sourceLineNo">036</span>    private static final int DEFAULT_BUFFER_SIZE = 1024 * 4;<a name="line.36"></a>
<span class="sourceLineNo">037</span><a name="line.37"></a>
<span class="sourceLineNo">038</span>    /**<a name="line.38"></a>
<span class="sourceLineNo">039</span>     * Represents the end-of-file (or stream).<a name="line.39"></a>
<span class="sourceLineNo">040</span>     */<a name="line.40"></a>
<span class="sourceLineNo">041</span>    public static final int EOF = -1;<a name="line.41"></a>
<span class="sourceLineNo">042</span><a name="line.42"></a>
<span class="sourceLineNo">043</span>    /**<a name="line.43"></a>
<span class="sourceLineNo">044</span>     * Copies chars from a &lt;code&gt;Reader&lt;/code&gt; to a &lt;code&gt;Writer&lt;/code&gt;.<a name="line.44"></a>
<span class="sourceLineNo">045</span>     * &lt;p/&gt;<a name="line.45"></a>
<span class="sourceLineNo">046</span>     * This method buffers the input internally, so there is no need to use a<a name="line.46"></a>
<span class="sourceLineNo">047</span>     * &lt;code&gt;BufferedReader&lt;/code&gt;.<a name="line.47"></a>
<span class="sourceLineNo">048</span>     * &lt;p/&gt;<a name="line.48"></a>
<span class="sourceLineNo">049</span>     * Large streams (over 2GB) will return a chars copied value of<a name="line.49"></a>
<span class="sourceLineNo">050</span>     * &lt;code&gt;-1&lt;/code&gt; after the copy has completed since the correct<a name="line.50"></a>
<span class="sourceLineNo">051</span>     * number of chars cannot be returned as an int. For large streams<a name="line.51"></a>
<span class="sourceLineNo">052</span>     * use the &lt;code&gt;copyLarge(Reader, Writer)&lt;/code&gt; method.<a name="line.52"></a>
<span class="sourceLineNo">053</span>     *<a name="line.53"></a>
<span class="sourceLineNo">054</span>     * @param input the &lt;code&gt;Reader&lt;/code&gt; to read from<a name="line.54"></a>
<span class="sourceLineNo">055</span>     * @param output the &lt;code&gt;Writer&lt;/code&gt; to write to<a name="line.55"></a>
<span class="sourceLineNo">056</span>     * @return the number of characters copied, or -1 if &amp;gt; Integer.MAX_VALUE<a name="line.56"></a>
<span class="sourceLineNo">057</span>     * @throws NullPointerException if the input or output is null<a name="line.57"></a>
<span class="sourceLineNo">058</span>     * @throws IOException          if an I/O error occurs<a name="line.58"></a>
<span class="sourceLineNo">059</span>     * @since 1.1<a name="line.59"></a>
<span class="sourceLineNo">060</span>     */<a name="line.60"></a>
<span class="sourceLineNo">061</span>    public static int copy(final Reader input, final Writer output) throws IOException {<a name="line.61"></a>
<span class="sourceLineNo">062</span>        final long count = copyLarge(input, output);<a name="line.62"></a>
<span class="sourceLineNo">063</span>        if (count &gt; Integer.MAX_VALUE) {<a name="line.63"></a>
<span class="sourceLineNo">064</span>            return -1;<a name="line.64"></a>
<span class="sourceLineNo">065</span>        }<a name="line.65"></a>
<span class="sourceLineNo">066</span>        return (int) count;<a name="line.66"></a>
<span class="sourceLineNo">067</span>    }<a name="line.67"></a>
<span class="sourceLineNo">068</span><a name="line.68"></a>
<span class="sourceLineNo">069</span>    /**<a name="line.69"></a>
<span class="sourceLineNo">070</span>     * Copies chars from a large (over 2GB) &lt;code&gt;Reader&lt;/code&gt; to a &lt;code&gt;Writer&lt;/code&gt;.<a name="line.70"></a>
<span class="sourceLineNo">071</span>     * &lt;p/&gt;<a name="line.71"></a>
<span class="sourceLineNo">072</span>     * This method buffers the input internally, so there is no need to use a<a name="line.72"></a>
<span class="sourceLineNo">073</span>     * &lt;code&gt;BufferedReader&lt;/code&gt;.<a name="line.73"></a>
<span class="sourceLineNo">074</span>     * &lt;p/&gt;<a name="line.74"></a>
<span class="sourceLineNo">075</span>     * The buffer size is given by {@link #DEFAULT_BUFFER_SIZE}.<a name="line.75"></a>
<span class="sourceLineNo">076</span>     *<a name="line.76"></a>
<span class="sourceLineNo">077</span>     * @param input the &lt;code&gt;Reader&lt;/code&gt; to read from<a name="line.77"></a>
<span class="sourceLineNo">078</span>     * @param output the &lt;code&gt;Writer&lt;/code&gt; to write to<a name="line.78"></a>
<span class="sourceLineNo">079</span>     * @return the number of characters copied<a name="line.79"></a>
<span class="sourceLineNo">080</span>     * @throws NullPointerException if the input or output is null<a name="line.80"></a>
<span class="sourceLineNo">081</span>     * @throws IOException          if an I/O error occurs<a name="line.81"></a>
<span class="sourceLineNo">082</span>     * @since 1.3<a name="line.82"></a>
<span class="sourceLineNo">083</span>     */<a name="line.83"></a>
<span class="sourceLineNo">084</span>    public static long copyLarge(final Reader input, final Writer output) throws IOException {<a name="line.84"></a>
<span class="sourceLineNo">085</span>        return copyLarge(input, output, new char[DEFAULT_BUFFER_SIZE]);<a name="line.85"></a>
<span class="sourceLineNo">086</span>    }<a name="line.86"></a>
<span class="sourceLineNo">087</span><a name="line.87"></a>
<span class="sourceLineNo">088</span>    /**<a name="line.88"></a>
<span class="sourceLineNo">089</span>     * Copies chars from a large (over 2GB) &lt;code&gt;Reader&lt;/code&gt; to a &lt;code&gt;Writer&lt;/code&gt;.<a name="line.89"></a>
<span class="sourceLineNo">090</span>     * &lt;p/&gt;<a name="line.90"></a>
<span class="sourceLineNo">091</span>     * This method uses the provided buffer, so there is no need to use a<a name="line.91"></a>
<span class="sourceLineNo">092</span>     * &lt;code&gt;BufferedReader&lt;/code&gt;.<a name="line.92"></a>
<span class="sourceLineNo">093</span>     * &lt;p/&gt;<a name="line.93"></a>
<span class="sourceLineNo">094</span>     *<a name="line.94"></a>
<span class="sourceLineNo">095</span>     * @param input the &lt;code&gt;Reader&lt;/code&gt; to read from<a name="line.95"></a>
<span class="sourceLineNo">096</span>     * @param output the &lt;code&gt;Writer&lt;/code&gt; to write to<a name="line.96"></a>
<span class="sourceLineNo">097</span>     * @param buffer the buffer to be used for the copy<a name="line.97"></a>
<span class="sourceLineNo">098</span>     * @return the number of characters copied<a name="line.98"></a>
<span class="sourceLineNo">099</span>     * @throws NullPointerException if the input or output is null<a name="line.99"></a>
<span class="sourceLineNo">100</span>     * @throws IOException          if an I/O error occurs<a name="line.100"></a>
<span class="sourceLineNo">101</span>     * @since 2.2<a name="line.101"></a>
<span class="sourceLineNo">102</span>     */<a name="line.102"></a>
<span class="sourceLineNo">103</span>    public static long copyLarge(final Reader input, final Writer output, final char[] buffer) throws IOException {<a name="line.103"></a>
<span class="sourceLineNo">104</span>        long count = 0;<a name="line.104"></a>
<span class="sourceLineNo">105</span>        int n;<a name="line.105"></a>
<span class="sourceLineNo">106</span>        while (EOF != (n = input.read(buffer))) {<a name="line.106"></a>
<span class="sourceLineNo">107</span>            output.write(buffer, 0, n);<a name="line.107"></a>
<span class="sourceLineNo">108</span>            count += n;<a name="line.108"></a>
<span class="sourceLineNo">109</span>        }<a name="line.109"></a>
<span class="sourceLineNo">110</span>        return count;<a name="line.110"></a>
<span class="sourceLineNo">111</span>    }<a name="line.111"></a>
<span class="sourceLineNo">112</span><a name="line.112"></a>
<span class="sourceLineNo">113</span>    /**<a name="line.113"></a>
<span class="sourceLineNo">114</span>     * Gets the contents of a &lt;code&gt;Reader&lt;/code&gt; as a String.<a name="line.114"></a>
<span class="sourceLineNo">115</span>     * &lt;p/&gt;<a name="line.115"></a>
<span class="sourceLineNo">116</span>     * This method buffers the input internally, so there is no need to use a<a name="line.116"></a>
<span class="sourceLineNo">117</span>     * &lt;code&gt;BufferedReader&lt;/code&gt;.<a name="line.117"></a>
<span class="sourceLineNo">118</span>     *<a name="line.118"></a>
<span class="sourceLineNo">119</span>     * @param input the &lt;code&gt;Reader&lt;/code&gt; to read from<a name="line.119"></a>
<span class="sourceLineNo">120</span>     * @return the requested String<a name="line.120"></a>
<span class="sourceLineNo">121</span>     * @throws NullPointerException if the input is null<a name="line.121"></a>
<span class="sourceLineNo">122</span>     * @throws IOException          if an I/O error occurs<a name="line.122"></a>
<span class="sourceLineNo">123</span>     */<a name="line.123"></a>
<span class="sourceLineNo">124</span>    public static String toString(final Reader input) throws IOException {<a name="line.124"></a>
<span class="sourceLineNo">125</span>        final StringBuilderWriter sw = new StringBuilderWriter();<a name="line.125"></a>
<span class="sourceLineNo">126</span>        copy(input, sw);<a name="line.126"></a>
<span class="sourceLineNo">127</span>        return sw.toString();<a name="line.127"></a>
<span class="sourceLineNo">128</span>    }<a name="line.128"></a>
<span class="sourceLineNo">129</span><a name="line.129"></a>
<span class="sourceLineNo">130</span>}<a name="line.130"></a>




























































</pre>
</div>
</body>
</html>
