mirror of https://github.com/alibaba/easyexcel
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
2.2 KiB
87 lines
2.2 KiB
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; |
|
} |
|
}
|
|
|