复制输入流,如果大小超过限制,则中止操作
2022-09-02 09:02:14
我尝试将 InputStream 复制到文件,如果 InputStream 的大小大于 1MB,则中止该副本。在Java7中,我编写了如下代码:
public void copy(InputStream input, Path target) {
OutputStream out = Files.newOutputStream(target,
StandardOpenOption.CREATE_NEW, StandardOpenOption.WRITE);
boolean isExceed = false;
try {
long nread = 0L;
byte[] buf = new byte[BUFFER_SIZE];
int n;
while ((n = input.read(buf)) > 0) {
out.write(buf, 0, n);
nread += n;
if (nread > 1024 * 1024) {// Exceed 1 MB
isExceed = true;
break;
}
}
} catch (IOException ex) {
throw ex;
} finally {
out.close();
if (isExceed) {// Abort the copy
Files.deleteIfExists(target);
throw new IllegalArgumentException();
}
}}
- 第一个问题:有没有更好的解决方案?
- 第二个问题:我的另一个解决方案 - 在复制操作之前,我计算这个输入流的大小。因此,我复制输入流,然后获得.但问题是 InputStream 可能不会,所以 InputStream 不能在复制文件操作中重用。
ByteArrayOutputStream
size()
markSupported()