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:
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();
}