OutputStream to InputStream

Titanpharao

Bekanntes Mitglied
Hallo liebe Community,

ich komme leider mal wieder nicht weiter :(

und zwar habe ich einen OutputStream, den ich so auslese.
Code:
        while ((ze = zis.getNextEntry()) != null) {
            FileOutputStream fos = new FileOutputStream(ze.getName());
            int b;
            while ((b = zis.read()) != -1) {
                fos.write(b);
            }
            fos.close();
            zis.closeEntry();
        }

Diesen möchte ich jetzt in einen Inputstream umleiten. Also die klasse, welche ich benötige nimmt ein File/InputStream entgegen, aber ich möchte nicht erst die Dateien entpacken, sondern sie direkt umleiten.
 

Ark

Top Contributor
Klingt nach einer Pipe (einfach mal im Paket java.io nachgucken). Wenn das nicht weiterhilft: Code, bitte. ;)

Ark
 

Titanpharao

Bekanntes Mitglied
Code:
        while ((ze = zis.getNextEntry()) != null) {
            FileOutputStream fos = new FileOutputStream(ze.getName());
            int b;
            while ((b = zis.read()) != -1) {
                fos.write(b);
            }
            fos.close();
workbook = Workbook.getWorkbook(fos); //<--- hier brauche ich einen InputStream

            zis.closeEntry();
        }

Ja mit so einer "pipe" habe ich da auch schon probiert, aber wuste nicht so richtig damit umzugehen, bzw ist er dann stehen geblieben :/?
 

L-ectron-X

Gesperrter Benutzer
Was meinst du mit "stehengeblieben"? Vielleicht brauchst du nur noch den Stream leeren, also flush() aufrufen, damit er den Rest schreibt. :bahnhof:
 

kay73

Bekanntes Mitglied
Du hast ein oder mehrere Excelfiles in einer ZIP-Datei und verwendest JExcel, oder?

Ein
Code:
read()
auf einem
Code:
PipedInputStream
und ein
Code:
write()
Code:
PipedOutputStream
dürfen nicht zusammen gleichen Thread ausgeführt werden. Vielleicht war das das Problem mit dem "Anhalten".

Es ist aber ein bisschen Overkill, immer einen neuen Thread/ExecutorService zu erzeugen. Ein paar Tipps:
  • Aus dem lokalen
    Code:
    ExecutorService EX
    einen klassenweiten,
    Code:
    final
    CachedThreadPool machen, damit ihn Aufrufe von
    Code:
    workbookFromInputStream
    wiederverwenden können.
  • Nicht vergessen, das
    Code:
    shutdown()
    aufrufen.
Java:
package jexcelpipedemo;
 
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.zip.ZipInputStream;
 
import jxl.Workbook;
 
public class JExcelPipeDemo {
    
    public Workbook workbookFromInputStream(final InputStream is) throws IOException, InterruptedException, ExecutionException {
                
        final PipedInputStream pis = new PipedInputStream();
        final PipedOutputStream pos = new PipedOutputStream(pis);
        
        final ExecutorService EX = Executors.newSingleThreadExecutor(); 
        
        final Future<Workbook> f = EX.submit(new Callable<Workbook>() {
 
            @Override
            public Workbook call() throws Exception {
                return Workbook.getWorkbook(pis);
            }
        });
        EX.shutdown();
        
        int n;
        final byte buffer [] = new byte [1024];     
        
        while(-1 != (n = is.read(buffer))) {
            pos.write(buffer, 0, n);
            pos.flush();    
        }       
        
        pos.close();
        return f.get();
    }
 
    public static void main(String[] args) throws IOException, InterruptedException, ExecutionException {
        final FileInputStream is = new FileInputStream("/home/kay/Dokumente/exceltest.zip");
        final ZipInputStream zis = new ZipInputStream(is);
        zis.getNextEntry();
        
        Workbook wb = new JExcelPipeDemo().workbookFromInputStream(zis);
        
        for(final String sheetNames : wb.getSheetNames()) {
            System.out.println(sheetNames);
        }
    }
}
 
Zuletzt bearbeitet:

Titanpharao

Bekanntes Mitglied
Entschuldig meine Aussage zu deinem Quellcode, ich hatte damals kein Zeit und habe nur schnell drüber geschaut, es funktioniert prima auch wenn ich nicht ganz verstehe wie :D aber es geht ;) vielen dank
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Mal ein paar generelle Fragen zu InputStream und OutputStream Allgemeine Java-Themen 4
S von OutputStream in InputStream schreiben ohne das es blockiert..? Allgemeine Java-Themen 2
A Inputstream in Outputstream umleiten Allgemeine Java-Themen 7
T Input und Outputstream , serielle Schnittstelle Allgemeine Java-Themen 1
Meeresgott Input/Output OutputStream löscht Datei Allgemeine Java-Themen 7
F Jar OutputStream Allgemeine Java-Themen 4
T Outputstream write() gets blocked using RXTX to communicate with HC-05 BT Module Allgemeine Java-Themen 10
D Java Process OutputStream ist null Allgemeine Java-Themen 4
P Input/Output Process.getErrorStream = OutputStream Allgemeine Java-Themen 11
G Auf Kommandozeile über Processobjekt mit Outputstream Allgemeine Java-Themen 3
M rxtx OutputStream sendet falsche werte Allgemeine Java-Themen 3
L Abspeichern von OutputStream Allgemeine Java-Themen 6
E Outputstream an verschiedenen Positionen beschreiben Allgemeine Java-Themen 4
A Eigenen OutputStream schreiben und verwenden Allgemeine Java-Themen 9
D zip Dateien schreiben mit in/outputstream Allgemeine Java-Themen 10
S OutputStream via POST senden Allgemeine Java-Themen 4
W StringBuilder effektiv auf OutputStream schreiben Allgemeine Java-Themen 3
Landei CipherInput/OutputStream-Problem Allgemeine Java-Themen 2
G Double Wert über OutputStream verschicken Allgemeine Java-Themen 2
S outputstream über fileUrl Allgemeine Java-Themen 15
L Problem mit dem OutputStream eines Prozesses Allgemeine Java-Themen 9
G OutputStream to System.out Allgemeine Java-Themen 35
I input-/outputstream Allgemeine Java-Themen 6
Junktyz In Writer und Outputstream wird teilweise nicht geschrieben Allgemeine Java-Themen 3
reibi FileOutputStream aus OutputStream erstellen Allgemeine Java-Themen 7
H Problem mit OutputStream Allgemeine Java-Themen 5
T OutputStream - Prozente ermitteln Allgemeine Java-Themen 3
T OutputStream - Event bei Byte-Fluss Allgemeine Java-Themen 5
D Cipher(In)OutputStream Allgemeine Java-Themen 3
R Ladebalken für einen Outputstream. Allgemeine Java-Themen 10
J Binärdateien mit Input/Outputstream lesen und schreiben Allgemeine Java-Themen 3
m@nu Schreibschutz entfernen und OutputStream öffnen Allgemeine Java-Themen 6
T Problem mit Outputstream? Allgemeine Java-Themen 2
X Input/Output InputStream/Scanner(System.in) read()/hasNextLine() block unterbrechen Allgemeine Java-Themen 7
krgewb Problem mit Umlauten und Eszett bei InputStream Allgemeine Java-Themen 3
L Input/Output InputStream öffnen? Allgemeine Java-Themen 12
P Input/Output Inputstream verhält sich verschieden Allgemeine Java-Themen 9
R Inputstream lesen mit Pointer Allgemeine Java-Themen 0
M InputStream auslesen Allgemeine Java-Themen 1
M String aus InputStream Allgemeine Java-Themen 3
C Threading mit BufferedReader/InputStream & sockets Allgemeine Java-Themen 0
B BufferedWriter in InputStream oder Zeichen-Stream in Byte-Stream Allgemeine Java-Themen 5
P Scanner als Inputstream für Java Prozess Allgemeine Java-Themen 4
E POI-InputStream selber wählen Allgemeine Java-Themen 2
S RandomAcessFile das einen InputStream wrappt..? Allgemeine Java-Themen 2
M Umwandlung ByteArrayOutputStream in InputStream Allgemeine Java-Themen 5
1 InputStream hängt Allgemeine Java-Themen 4
H Input/Output InputStream: 32-Bit-Ganzzahl (DWORD) binär lesen Allgemeine Java-Themen 5
D Datentypen Reader/InputStream wiederverwenden? Allgemeine Java-Themen 11
K Inputstream -> Bilder Allgemeine Java-Themen 23
1 InputStream liest die letzte Zeile nicht ein Allgemeine Java-Themen 2
J Java Datei aus FTP in ein INputstream Allgemeine Java-Themen 2
J InputStream Zip-File Allgemeine Java-Themen 3
F ImageIO cant create InputStream Allgemeine Java-Themen 9
S InputStream "weiterleiten" Allgemeine Java-Themen 12
T Integer aus InputStream lesen Allgemeine Java-Themen 3
T Undwandlung eines String in einen InputStream? Allgemeine Java-Themen 3
M Selbst geschriebener InputStreamReader über einen beliebigen InputStream Allgemeine Java-Themen 4
reibi BufferedImage nach InputStream Allgemeine Java-Themen 10
R InputStream zweimal lesen Allgemeine Java-Themen 2
G InputStream und File Allgemeine Java-Themen 11
B InputStream zu URL umwandeln Allgemeine Java-Themen 2
F Teile vom InputStream schreiben Allgemeine Java-Themen 9
J InputStream aus URL funktioniert nicht Allgemeine Java-Themen 7
H InputStream Problem mit externem Kommandozeilenprogramm Allgemeine Java-Themen 2
W InputStream öfters nutzen Allgemeine Java-Themen 9
R The mark method of InputStream does nothing. Allgemeine Java-Themen 4
V String oder doch InputStream? Allgemeine Java-Themen 9
Nils_Langner InputStream soll sich bei neuen Daten melden Allgemeine Java-Themen 2
R InputStream - seltsamer Output Allgemeine Java-Themen 2
S java.io.InputStream.read(byte[] b) überschreiben Allgemeine Java-Themen 33
N InputStream erst ab gegebener Position Allgemeine Java-Themen 4
R InputStream Allgemeine Java-Themen 5
G InputStream kopieren? Allgemeine Java-Themen 6
D Inputstream aus StringBuffer Allgemeine Java-Themen 3
G inputstream() to imageicon() Allgemeine Java-Themen 7
D Durch OutpustStream und InputStream dateien in eine jar sch Allgemeine Java-Themen 3
G aus String einen InputStream erstellen Allgemeine Java-Themen 2
C Wie kann man im InputStream nach einer Zeichenkette suchen? Allgemeine Java-Themen 4
R Aus InputStream wieder eine Datei erzeugen? Allgemeine Java-Themen 2
N String als Inputstream Allgemeine Java-Themen 4
N Suchen in InputStream/ByteArrayOutputStream Allgemeine Java-Themen 11
M InputStream.read abbrechen Allgemeine Java-Themen 2

Ähnliche Java Themen


Oben