Java tutorial
/* * * * Licensed 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 voldemort.utils; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.io.StringWriter; import java.io.Writer; import org.apache.commons.io.IOUtils; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.log4j.Logger; public class VoldemortIOUtils { private static final int DEFAULT_BUFFER_SIZE = 1024 * 4; private static final Logger logger = Logger.getLogger(VoldemortIOUtils.class); public static String toString(final InputStream input, final long limit) throws IOException { return toString(input, null, limit); } public static void closeQuietly(final HttpResponse httpResponse, final String context) { if (httpResponse != null && httpResponse.getEntity() != null) { try { IOUtils.closeQuietly(httpResponse.getEntity().getContent()); } catch (Exception e) { logger.error("Error closing entity connection : " + context, e); } } } public static void closeQuietly(final HttpResponse httpResponse) { closeQuietly(httpResponse, ""); } public static void closeQuietly(HttpClient httpClient) { if (httpClient != null) { httpClient.getConnectionManager().shutdown(); } } public static String toString(final InputStream input, final String encoding, final long limit) throws IOException { StringWriter sw = new StringWriter(); copy(input, sw, encoding, limit); return sw.toString(); } public static void copy(InputStream input, Writer output, String encoding, final long limit) throws IOException { if (encoding == null) { copy(input, output, limit); } else { InputStreamReader in = new InputStreamReader(input, encoding); copy(in, output, limit); } } public static void copy(InputStream input, Writer output, final long limit) throws IOException { InputStreamReader in = new InputStreamReader(input); copy(in, output, limit); } public static int copy(Reader input, Writer output, long limit) throws IOException { long count = copyLarge(input, output, limit); if (count > Integer.MAX_VALUE) { return -1; } return (int) count; } public static long copyLarge(Reader input, Writer output, long limit) throws IOException { char[] buffer = new char[DEFAULT_BUFFER_SIZE]; long count = 0; int n = 0; long remaining = limit; while (remaining > 0) { n = (remaining > DEFAULT_BUFFER_SIZE) ? input.read(buffer) : input.read(buffer, 0, (int) remaining); if (n == -1) { break; } output.write(buffer, 0, n); count += n; remaining -= n; } return count; } }