我有一个类Sample,它有两个构造函数.一个采用File的对象,而另一个采用InputStream.
package org.xyz.core;
import java.io.File;
import java.io.InputStream;
/**
* Created by Ashish Pancholi on 26-03-2016.
*/
public class Sample {
File file;
public Sample(File file){
this.file=file;
}
public Sample(InputStream inputStream){
this.file = createFileFromInputStream(inputStream);
}
}
我使用LinkedBlockingQueue消耗Sample的对象,深度为10000;
BlockingQueue queue = new LinkedBlockingQueue(10000);
我们假设有两种情况:
情况A:我通过将InputStream作为参数传递来初始化Sample类的这么多实例,并将所有这些对象推送到LinkedBlockingQueue中.
情况B:我通过将File对象作为参数传递来初始化这么多的Sample类实例,并将所有这些对象推送到LinkedBlockingQueue中.
在哪种情况下我的程序会占用更多内存?如果我将InputStream的对象保存到内存中,那么这是否意味着我将整个文件存储到内存中?如果我有这么多大文件怎么办?
更新:
请注意:我通过这种方式创建InputStream:
InputStream is = new TarArchiveInputStream(new GZIPInputStream(new BufferedInputStream(new FileInputStream(file))));