// // Getdown - application installer, patcher and launcher // Copyright (C) 2004-2018 Getdown authors // https://github.com/threerings/getdown/blob/master/LICENSE package com.threerings.getdown.util; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.Reader; import java.io.Writer; import java.nio.charset.Charset; import static com.threerings.getdown.Log.log; public class StreamUtil { /** * Convenient close for a stream. Use in a finally clause and love life. */ public static void close (InputStream in) { if (in != null) { try { in.close(); } catch (IOException ioe) { log.warning("Error closing input stream", "stream", in, "cause", ioe); } } } /** * Convenient close for a stream. Use in a finally clause and love life. */ public static void close (OutputStream out) { if (out != null) { try { out.close(); } catch (IOException ioe) { log.warning("Error closing output stream", "stream", out, "cause", ioe); } } } /** * Convenient close for a Reader. Use in a finally clause and love life. */ public static void close (Reader in) { if (in != null) { try { in.close(); } catch (IOException ioe) { log.warning("Error closing reader", "reader", in, "cause", ioe); } } } /** * Convenient close for a Writer. Use in a finally clause and love life. */ public static void close (Writer out) { if (out != null) { try { out.close(); } catch (IOException ioe) { log.warning("Error closing writer", "writer", out, "cause", ioe); } } } /** * Copies the contents of the supplied input stream to the supplied output stream. */ public static T copy (InputStream in, T out) throws IOException { byte[] buffer = new byte[4096]; for (int read = 0; (read = in.read(buffer)) > 0; ) { out.write(buffer, 0, read); } return out; } /** * Reads the contents of the supplied stream into a byte array. */ public static byte[] toByteArray (InputStream stream) throws IOException { return copy(stream, new ByteArrayOutputStream()).toByteArray(); } }