package com.alibaba.excel.util; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; /** * IO Utils * * @author Jiaju Zhuang */ public class IoUtils { public static final int EOF = -1; /** * The default buffer size ({@value}) to use for */ private static final int DEFAULT_BUFFER_SIZE = 1024 * 4; private IoUtils() {} /** * Gets the contents of an InputStream as a byte[]. * * @param input * @return * @throws IOException */ public static byte[] toByteArray(final InputStream input) throws IOException { final ByteArrayOutputStream output = new ByteArrayOutputStream(); try { copy(input, output); return output.toByteArray(); } finally { output.toByteArray(); } } /** * Gets the contents of an InputStream as a byte[]. * * @param input * @param size * @return * @throws IOException */ public static byte[] toByteArray(final InputStream input, final int size) throws IOException { if (size < 0) { throw new IllegalArgumentException("Size must be equal or greater than zero: " + size); } if (size == 0) { return new byte[0]; } final byte[] data = new byte[size]; int offset = 0; int read; while (offset < size && (read = input.read(data, offset, size - offset)) != EOF) { offset += read; } if (offset != size) { throw new IOException("Unexpected read size. current: " + offset + ", expected: " + size); } return data; } /** * Copies bytes * * @param input * @param output * @return * @throws IOException */ public static int copy(final InputStream input, final OutputStream output) throws IOException { long count = 0; int n; byte[] buffer = new byte[DEFAULT_BUFFER_SIZE]; while (EOF != (n = input.read(buffer))) { output.write(buffer, 0, n); count += n; } if (count > Integer.MAX_VALUE) { return -1; } return (int)count; } }