【发布时间】:2014-01-23 09:55:47
【问题描述】:
我能够从 http 位置读取小于 2GB 的文件。但是,如果我尝试读取大于 2 GB 的文件,则会出现异常。我没有完全阅读,而是分块阅读。下面是我的代码 sn-p 和异常消息。如果您有进一步的线索,请帮助我
BufferedOutputStream bos = new BufferedOutputStream(os);
URL url = new URL(fileName);
LOGGER.debug(url.toString());
URLConnection connection = url.openConnection();
LOGGER.debug("Before getting input stream 100 MB, open input stream::" + downloadFileName);
// BufferedInputStream in = new BufferedInputStream(url.openStream());
InputStream in = url.openStream();
// InputStreamReader inReader = new InputStreamReader(in);
// InputStream in = connection.getInputStream();
LOGGER.debug("Afters getting input stream, open inputstream::" + downloadFileName);
// in.
// LOGGER.debug("in1::" + in1);
final byte[] buffer = new byte[100 * 1024 * 1024]; // 100Mb
while (true)
{
LOGGER.debug("Reading..");
final int read = in.read(buffer);
LOGGER.debug("Read..");
if (read < 0)
{
break;
}
LOGGER.debug("Writing..");
bos.write(buffer, 0, read);
LOGGER.debug("Wrote..");
// bos.
}
【问题讨论】:
-
您是否能够/是否尝试过更改 JVM 的最大堆大小?
-
能不写不写试试看(注释掉bos),看看能不能读2GB以上的数据?
-
“连接重置”表示远程对等体断开了连接。您的问题可能与 2 GB 大小无关,如果确实如此,则它在 sender 的方面。
-
可能是服务器端超时。
-
Problems reading a huge file of 12 MB (java.lang.OutOfMemoryError) 的可能副本。它也是一个基于
InputStream的问题。
标签: java inputstream