我试图将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();
}
}}
ByteArrayOutputStream
然后得到size()
。但是问题是InputStream可能不是markSupported()
,因此InputStream无法在复制文件操作中重用。第一个问题:是否有更好的解决方案?
并不是的。当然,不会明显更好。
第二个问题:我的另一个解决方案-
在复制操作之前,我先计算InputStream的大小。所以我将InputStream复制到ByteArrayOutputStream然后获取size()。但是问题是InputStream可能没有markSupported(),因此InputStream无法在复制文件操作中重用。
撇开上面的说法不是问题…
如果您已将字节复制到ByteArrayOutputStream
,则可以ByteArrayInputStream
从返回的字节数组中创建一个baos.toByteArray()
。因此,您无需标记/重置原始流。
但是,这是实现此方法的非常难看的方法。尤其重要,因为无论如何您都在读取和缓冲 整个 输入流。
我正在开发一个Java程序,该程序将从Sybase数据库获取数据,并使用UCanAccess将其导入Microsoft Access数据库。但是,我目前遇到了一个问题,收到了错误“java.lang.OutOfMemoryError:超出了GC开销限制”。 为了将这种情况放到上下文中,我正在尝试将大约130万条记录导入Access数据库。在导入了大约800000条记录之后,在运行时大约十分钟,以及
问题内容: 我有两个文件,它们合并在一起的长度小于600字节(.6kb),如下所示。 那么我的app.bundle.js太大了(987kb),又如何管理它的大小又如何呢? src文件index.js src文件print.js webpack.config.js package.json 警告信息: 资产大小限制警告:以下资产超过了建议的大小限制(244 KiB)。这可能会影响网络性能。资产:ap
问题内容: 我需要将数据(varbinary(max))从一个表迁移到另一个表。执行更新以执行此操作时,出现以下错误 这是我用来从表DocumentPublication复制到DocumentVersion的更新 有无演员 通过逐行执行更新,我隔离了给出错误的行。奇怪的是,该字段中的数据仅为3950字节,而其他具有更少或更多(例如2000字节或20MB)的行则可以正常工作。 然后,我用另一个名称重
问题内容: 我有时编写Python程序,这些程序很难确定执行前将使用多少内存。因此,有时我会调用一个Python程序,该程序试图分配大量RAM,从而导致内核大量交换并降低其他正在运行的进程的性能。 因此,我希望限制Python堆可以增长多少内存。达到限制后,程序可能会崩溃。最好的方法是什么? 如果重要的话,很多代码都用Cython编写,因此应该考虑在那里分配的内存。我还没有嫁给一个纯粹的Pytho
问题内容: 我试图通过这样将数据从一个活动传递到另一个活动: 这是包含用户数据的列表,包括Base64编码的照片,此列表中字符串大小的总和约为500Kb 打电话到黑屏挂了几分钟,然后出现ANR错误。完全不调用子活动。 如果我不向mUsers中添加大字符串(没有Base64编码的照片),则可以正常工作。 请帮忙。 问题答案: 如果两种活动都是您的,请使用体面的数据模型。Android不鼓励设计精良的
我试图在我的博客上使用AMP,将图像转换为AMP图像会导致图像脱离div并破坏整个显示。 未激活AMP时,图像如下所示: 当放大器被激活时,它们看起来是这样的 我只是执行了一个preg_replace,用amp-img替换img标签。 如果没有AMP,图像会停留在父DIV内,但如果激活AMP,则图像会完全脱离DIV。如果我尝试将父DIV设置为宽度的10%以查看发生了什么,我会看到父DIV占据了宽度