Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将文件从URL流到文件,而不将其存储在内存中_Java_Android_Stream - Fatal编程技术网

Java 将文件从URL流到文件,而不将其存储在内存中

Java 将文件从URL流到文件,而不将其存储在内存中,java,android,stream,Java,Android,Stream,我想从URL下载一个文件并将其存储到文件系统中。然而,我有内存限制,我不想存储在内存之前。我不是java专家,我对所有的类InputStream、BufferedReader、FileOutputStream等都有点迷茫。你能帮我吗 目前我有: URLConnection ucon = url.openConnection(); ucon.connect(); InputStream is = ucon.getInputStream(); // Create a reader for the i

我想从URL下载一个文件并将其存储到文件系统中。然而,我有内存限制,我不想存储在内存之前。我不是java专家,我对所有的类InputStream、BufferedReader、FileOutputStream等都有点迷茫。你能帮我吗

目前我有:

URLConnection ucon = url.openConnection();
ucon.connect();
InputStream is = ucon.getInputStream();
// Create a reader for the input stream.
BufferedReader br = new BufferedReader(isr);

// ?

FileOutputStream fos = context.openFileOutput(FILENAME, Context.MODE_PRIVATE);
// Here the content can be too big for the memory...
fos.write(content.getBytes());
fos.close();
拜托,你能给我一些线索吗?我还想一块一块地读,但我不确定java最简单的方法是什么…

您可以使用

我猜它在android上可能不起作用 我使用这个代码

InputStream input = connection.getInputStream();
byte[] buffer = new byte[4096];
int cnt = - 1;

OutputStream output = new FileOutputStream(file);
while ( (cnt = input.read(buffer)) != -1)
{
  output.write(buffer, 0, cnt);
}
output.close();

“我是一名java专家,我对所有的InputStream、BufferedReader、FileOutputStream类都有点迷茫……”
——你是说你不是java专家吗?因为这句话的两个部分在一起没有意义。太好了,谢谢。这更有道理。你有什么样的“记忆限制”,为什么?你当前的代码怎么不起作用呢?我在安卓上,我认为这些设备一定有内存限制。我仍然不明白为什么你认为使用BufferedReader(其缓冲区大小可以顺便设置)会占用太多内存。你应该对使用这个没有限制。我使用了Sergi0提出的方法,效果很好(这就是我说的“逐块”时的想法)。对不起,我不太清楚。这个库在android平台上可用吗?如果没有,是否建议包含此库?通常最好使用该方法的版本,该版本接受connectionTimeout和readTimeout参数-否则,在某些情况下,您可能会发现阻塞时间过长,无法接受。
InputStream input = connection.getInputStream();
byte[] buffer = new byte[4096];
int cnt = - 1;

OutputStream output = new FileOutputStream(file);
while ( (cnt = input.read(buffer)) != -1)
{
  output.write(buffer, 0, cnt);
}
output.close();