Ich habe eine Klasse Sample
, die zwei Konstruktoren hat. Man nimmt ein Objekt von File
, während ein anderes ein InputStream
nimmt.Wenn ich Objekte von InputStream im Speicher belasse, heißt das, dass ich die ganze Datei im Speicher ablege?
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);
}
}
Und ich bin mit LinkedBlockingQueue
, die ein Objekt der Probe verbraucht und hat eine Tiefe von 10000;
BlockingQueue<String> queue = new LinkedBlockingQueue<Sample>(10000);
Lass sich hier zwei Fälle annehmen:
Fall A: ich so viele Instanzen von Sample
Klasse initialisieren, indem InputStream
als ein Argument zu übergeben und ich schob all diese Objekte in die LinkedBlockingQueue
.
Fall B: ich initialisieren so viele Instanzen von Sample
Klasse von File
Objekt als Argument zu übergeben und ich schob all diese Objekte in die LinkedBlockingQueue
.
In diesem Fall benötigt mein Programm mehr Speicher? Wenn ich Objekte von InputStream im Speicher belasse, heißt das, dass ich die gesamte Datei im Speicher ablege? Was ist, wenn ich so viele große Dateien habe?
Aktualisiert:
Bitte beachten Sie: Ich bin die InputStream
durch diese Art und Weise zu schaffen:
InputStream is = new TarArchiveInputStream(new GZIPInputStream(new BufferedInputStream(new FileInputStream(file))));
@AshishPancholi Auf welche Unterklasse von 'Inputstream' beziehen Sie sich? –
Es ist unklug, 'InputStream' als ein Feld zu speichern; Wer ist dafür verantwortlich, sie zu schließen? Wie können Sie garantieren, dass sie offen bleiben? Aber solange Sie keine Dateien in einem 'ByteArrayInputStream' lesen, spielt der Speicher keine Rolle. –
@MadhusudanaReddySunnapu jeder von ihnen, sicherlich. Ist das nicht der Punkt der Abstraktion? –