FileInputStream in FileOutputStream leiten

Colt45

Aktives Mitglied
Moin allerseits,
ich stehe vor folgender Aufgabe:
Daten von einem USB-Stick lesen, während des Lesens komprimieren und die komprimierten Daten auf einer SD-Karte UND glz. auf dem internen Speicher ablegen.
Gibt es die Möglichkeit quasi die Daten eines FileInputStreams direkt in einen OutputStream zu leiten und wie löse ich die Aufgabe mit dem glz. Speichern an 2 Orten? (Habe dabei an Threads gedacht)
Das Problem bei der Sache ist, dass es sich um relativ große Datenmengen handelt (>1GB) und der Benutzer nicht unbedingt eine Stunde warten sollte :)
Die Komprimierung erfolgt mittels der Apache Commons Compress Bibliothek und sieht momentan so aus:

Java:
public void compressBZip2(List<File> source, File target) throws FileNotFoundException, IOException,
			ArchiveException, CompressorException
	{
		OutputStream out = new BufferedOutputStream(new FileOutputStream(target));
		BZip2CompressorOutputStream cos = (BZip2CompressorOutputStream) new CompressorStreamFactory()
				.createCompressorOutputStream(CompressorStreamFactory.BZIP2,out);
		ArchiveOutputStream logical_zip = new ArchiveStreamFactory().createArchiveOutputStream(
				ArchiveStreamFactory.TAR,cos);
		for (File file : source)
		{
			TarArchiveEntry entry = new TarArchiveEntry(file.getPath());
			entry.setSize(file.length());
			logical_zip.putArchiveEntry(entry);
			IOUtils.copy(new FileInputStream(new File(file.getPath())),logical_zip);
			logical_zip.closeArchiveEntry();
		}
		logical_zip.finish();
		cos.close();
	}
 

kay73

Bekanntes Mitglied
Den TeeOutputStream kennst Du ja schon. Ist mit dem internen Speicher das RAM gemeint? Wenn ja, erzeug doch zusätzlich einen ByteArrayOutputStream und häng den zum FileOutputStream in einem TeeOutputStream. Gib dann z.B. das erzeugte byte-Array aus der Funktion zurück.

Also Zeile 4:
Java:
ByteArrayOutputStream bos = new ByteArrayOzutputStream();
 OutputStream out = new BufferedOutputStream(new TeeOutputStream(new FileOutputStream(target),bos)));


...

return bos.tyByteArray();
 
Zuletzt bearbeitet:

Colt45

Aktives Mitglied
Mit dem internen Speicher war der eingebaute (Festplatten)-Speicher vom Endgerät gemeint, da das ganze für ein Tablet entwickelt wird. Aber ich habs mittlerweile gelöst, werd morgen mal dazu den Code posten, wenn ich wieder im Büro bin
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Input/Output FileInputStream Allgemeine Java-Themen 8
JG12111989 FileInputStream - Breite einer bmp-Datei?? Allgemeine Java-Themen 8
C FileInputStream frage Allgemeine Java-Themen 6
M FileInputStream relativer Pfad in .jar Allgemeine Java-Themen 2
R new FileInputStream(in).getChannel(); Allgemeine Java-Themen 7
E relative Adresse bei FileInputStream Allgemeine Java-Themen 2
P Input/Output FileInputStream java.io.FileNotFoundException Allgemeine Java-Themen 36
S FileInputStream aplication Pfad Allgemeine Java-Themen 4
S FileInputStream aus ContextClassLoader? Allgemeine Java-Themen 3
D FileInputStream bzw. BufferedInput Stream Puffern Allgemeine Java-Themen 6
J Probleme mit FileInputStream Allgemeine Java-Themen 5
C FileOutputStream konkreter Pfad Allgemeine Java-Themen 3
M Datei wird nicht vollständig geschrieben (FileOutputStream, OutputStreamWriter, Encoding) Allgemeine Java-Themen 6
J Problem mit FileOutputStream Allgemeine Java-Themen 4
N FileOutputStream erzeugt datei Allgemeine Java-Themen 8
I FileOutputStream manilpulieren Allgemeine Java-Themen 4
T Umbiegen von FileOutputStream Allgemeine Java-Themen 2
reibi FileOutputStream aus OutputStream erstellen Allgemeine Java-Themen 7
E Umlaute: FileWriter vs. FileOutputStream Allgemeine Java-Themen 3
V Unterschied FileOutputStream und FileWriter? Allgemeine Java-Themen 8
M Nur mal eine kurze Frage zum FileOutPutStream Allgemeine Java-Themen 6
C FileOutPutStream in FileOutputStream Allgemeine Java-Themen 19
R Arraylist in andere Klasse leiten und bearbeiten Allgemeine Java-Themen 10

Ähnliche Java Themen

Neue Themen


Oben