Input/Output InputStream (JSch) in OutputStream (Blob) überführen

bish

Mitglied
Guten Morgen,
ich versuche derzeit eine Datei, die ich mittels SFTP (via JSch) downloade in einen Blob zu überführen. Die Datei zu erhalten funktioniert auch und ich kann sauber ein InputStream darauf setzten. Um einen Blob zu schreiben kann man diesem einem Outputstream anhängen, auch das funktioniert

Java:
			InputStream in = getChannel().get(dateiname);
			OutputStream out = b.setBinaryStream(0);

Soweit so gut, aber mein Programm schmiert immer ab, wenn ich nun den Übertrag machen möchte bleibt das ganze hängen und ich muss es manuell abschießen, damit ich weitearbeiten kann.

Hier der Versuch den Input in den Output zu überführen.
Java:
		       byte[] data = new byte[1024];
		       int i = 0;
		       try {
				while ((i = in.read(data)) != -1) {
				     out.write(data, 0, i);
				   }
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

Hat jemand eine Idee was ich falsch mache bzw. wie ich den Übertrag gefixt kriege? Eine Fehlermeldung erhalte ich nicht.
 

bish

Mitglied
Habs teilweise hinbekommen:

Java:
int j = 0;
			int nextChar;
			 while ( ( nextChar = in.read() ) != -1  )
			 {	 
				 System.out.println("j: " + j);
			 OutputStream out = b.setAsciiStream(j);
			 out.write( (char) nextChar );
			 out.flush();
			 
			 // Streamposition hochzählen
			 j++;
			 
			 System.out.println((char) nextChar);
			 System.out.println("length: " + b.length());

			 }

Der InputStream wird erhlaten und die Zeichen korrekt ausgelesen (was ich mittels Sysout mir angucke). Jedoch bleibt der BLOB (bzw CLOB, hab beides ausprobiert) unverändert. Der hat vor dem Betreten der Schleife eine Länge von 86 byte (was auch immer die Zeichen die da drin stehen sein sollen) und verändert sich nicht - heißt es wird irgendwie keine Data angehangen und die Länge bleibt immer gleich. Dies zeigt sich zumindest beim Debuggen in Eclipse, wenn ich mir den BLOB angucke.

Jemand da eine Idee warum der out.write() nicht beim Blob "ankommt"?
 

bERt0r

Top Contributor
Das ist unsinnig, du machst für jedes byte das du schreibst einen neuen Stream auf.
Java:
            int nextByte;
            OutputStream out = b.setOutputStream(0);
             while ( ( nextByte= in.read() ) != -1  )
             {   
             
             out.write( nextByte );
            }
             out.flush();

Flush macht erst am Ende Sinn und der Stream heisst ja nicht Stream weil er immer wieder von vorner zu schreiben beginnt, sondern weils ein Strom von Daten ist, der von selber weiterschreibt.
 

.Domii

Bekanntes Mitglied
bERt0r hat Recht.
Habe mich gerade damit beschäftigt
du closed niergends deinen stream das ist dir bewusst?
Java:
            int nextByte;
            OutputStream out = b.setOutputStream(0);
             while ( ( nextByte= in.read() ) != -1  )
             {   
             
             out.write( nextByte );
            }
             out.flush(); 
             out.close();
 

njans

Top Contributor
Soweit mir in Erinnerung flusht man den Stream mit close automatisch, somit kann der flush() Aufruf da auch weg.
 

bERt0r

Top Contributor
Flush schreibt den Buffer auf den Stream. Wenn du so wie in deinem Beispiel nach jedem Byte den Stream flusht, führst du den Buffer ad absurdum und es bremst gewaltig aus.
Ich bin mir nicht mal sicher ob dir in Java der Buffer überhaupt noch um die Ohren fliegen kann, ich schätze aber es wäre ein Zähler in deiner Schleife, der eben dann alle 1024 Bytes den Stream flusht, besser als nach jedem Byte zu flushen.
 
S

SlaterB

Gast
selbstverständlich wird ein Buffer automatisch geflusht wenn nötig,
solche Buffer sind idealerweise unsichtbar in der Stream-Kette eingebaut:
> OutputStream x = new XYStream(new BufferedOutputStream(new FileOutputStream(..)));
so dass gar keine Möglichkeit bestände, da flush() aufzurufen, das will man nicht
 

RySa

Bekanntes Mitglied
Du benutzt ja einen OutputStream. Ein kurzer blick in die API:
The general contract of flush is that calling it is an indication that, if any bytes previously written have been buffered by the implementation of the output stream, such bytes should immediately be written to their intended destination.

The flush method of OutputStream does nothing.
Beim OutputStream musst du den Stream schließen mit close() bevor da überhaupt etwas irgendwo "reingeschrieben" wird (anders als bei den BufferedStreams, bei denen das flush() durch das "leeren" des Buffers, das schreiben bewirkt.

Fazit: Du solltest einen BufferedOutputStream bzw. BufferedWriter nutzen oder einfach dein Stream am ende schließen mit close()


Beim BufferedWriter aber, jeden byte zu flushen ist böse ^^ Außerdem, wenn du mal in die Sourcen reinguckst, wirst du feststellen, dass der BufferedWriter intern überprüft ob die maximale (default, oder die von dir festgelegte) größe nicht erreicht/überschritten wurde, und wenn ja, dann führt er flush() automatisch aus. Da brauchst du es gar nicht aufzurufen. ggf. nur zur sicherheit vor dem close() obwohl das eigentlich auch überflüssig ist, da beim aufruf von close() auch intern noch flush() ausgeführt wird.
Es würde ja sonst kein Sinn machen, die maximale größe des Buffers einstellbar zu machen, wenn er nicht selbst flushen würde :)
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
I Dateigröße von einem InputStream oder byte[] bekommen Java Basics - Anfänger-Themen 2
berserkerdq2 inputstream und bufferedwirter /outputstream und bufferedwriter Java Basics - Anfänger-Themen 9
T Bluetooth, Inputstream Java Basics - Anfänger-Themen 0
I InputStream beim zweiten Mal fehlerhaft Java Basics - Anfänger-Themen 10
B Inputstream in file schreiben? Java Basics - Anfänger-Themen 23
B InputStream / OutputStream / PipedOutputStream und managedExecutorService Java Basics - Anfänger-Themen 3
B java.io.OutputStream zu java.io.InputStream konvertieren Java Basics - Anfänger-Themen 18
B Hilfe bei InputStream To File Java Basics - Anfänger-Themen 22
B InputStream (PDF) nach Image (PNG / JPG) konvertieren? Java Basics - Anfänger-Themen 2
B Konvertieren: Outputstream zu Inputstream Java Basics - Anfänger-Themen 13
J Was genau macht die Methode close() im InputStream? Java Basics - Anfänger-Themen 5
E InputStream im Servlet wirft Exception Java Basics - Anfänger-Themen 5
D InputStream parsen und als Bilddatei abspeichern Java Basics - Anfänger-Themen 1
G Input/Output InputStream gibt nicht die Korrekten Werte aus Java Basics - Anfänger-Themen 10
T Datentypen InputStream to list of Int (or similar) Java Basics - Anfänger-Themen 4
P bytes aus einem InputStream zählen Java Basics - Anfänger-Themen 2
P InputStream eines Musik-Streams abspielen Java Basics - Anfänger-Themen 2
I Resize Image - Einlesen von InputStream Java Basics - Anfänger-Themen 3
T Input/Output Exception bei einem InputStream Java Basics - Anfänger-Themen 2
W ProcessBuilder InputStream in Array speichern Java Basics - Anfänger-Themen 3
K InputStream erstellen Java Basics - Anfänger-Themen 4
B Input/Output Data / Buffer / File Outstream Inputstream Java Basics - Anfänger-Themen 2
L Webservice soll InputStream übergeben bekommen Java Basics - Anfänger-Themen 7
S Eigener InputStream, Hilfe bei read-Methode Java Basics - Anfänger-Themen 6
C InputStream Java Basics - Anfänger-Themen 2
O Input/Output Fragen zum InputStream Java Basics - Anfänger-Themen 7
E Input/Output Relativer Bild-Pfad für InputStream Java Basics - Anfänger-Themen 5
G Frage zu InputStream? Java Basics - Anfänger-Themen 11
E Socket InputStream "terminiert" nicht Java Basics - Anfänger-Themen 4
E Input/Output Inputstream während der Laufzeit füllen Java Basics - Anfänger-Themen 2
A Frage zu Beispiel eines Dekorierers von InputStream Java Basics - Anfänger-Themen 4
P Input/Output InputStream Listener? Java Basics - Anfänger-Themen 7
M Eigener InputStream will nicht mit BufferedReader Java Basics - Anfänger-Themen 3
S Input/Output Neuen InputStream System.in setzen Java Basics - Anfänger-Themen 11
A InputStream gibt nur jede 2te Zeile aus Java Basics - Anfänger-Themen 7
J InputStream FTP Java Basics - Anfänger-Themen 8
brunothg Inputstream zu Filechannel Java Basics - Anfänger-Themen 6
K StringWriter/String nach InputStream konvertieren Java Basics - Anfänger-Themen 3
Benji0815 Inputstream aus Konsole in JTextArea Java Basics - Anfänger-Themen 14
A Problem mit InputStream Java Basics - Anfänger-Themen 4
bastiann Kann man Inputstream nur auf ein Zeichen anwenden? Java Basics - Anfänger-Themen 5
U Inputstream.read()/readLine() blockiert immer Java Basics - Anfänger-Themen 18
S Problem mit url, inputStream und bytes beim Quellcode laden. Java Basics - Anfänger-Themen 6
G Kompletten InputStream der Kommandokonsole ausgeben Java Basics - Anfänger-Themen 8
G InputStream aufrufen, ändern und zurück geben Java Basics - Anfänger-Themen 2
W Zeichen ersetzen im InputStream Java Basics - Anfänger-Themen 3
N String vom InputStream in TextArea übertragen Java Basics - Anfänger-Themen 6
A Frage zu Puffergröße bei InputStream Java Basics - Anfänger-Themen 9
G in einem inputstream auf " " abfragen? Java Basics - Anfänger-Themen 3
M Datei speichern mittels InputStream Java Basics - Anfänger-Themen 13
P InputStream in Byte-Array speichern Java Basics - Anfänger-Themen 2
G String in InputStream umwandeln? Java Basics - Anfänger-Themen 8
M Auslesen eines InputStream Java Basics - Anfänger-Themen 4
M Problem mit InputStream Java Basics - Anfänger-Themen 7
S Probleme mit InputStream- Rückgabe Java Basics - Anfänger-Themen 4
I InputStream von Konsole abfangen Java Basics - Anfänger-Themen 6
G InputStream im finally-Block schließen Java Basics - Anfänger-Themen 7
K InputStream? Java Basics - Anfänger-Themen 3
S Sockets and InputStream Java Basics - Anfänger-Themen 2
M InputStream einer Socketverbindung funktioniert nicht Java Basics - Anfänger-Themen 19
M Byte InputStream zu Zeichenformat Unicode bzw String konvert Java Basics - Anfänger-Themen 5
R InputStream erstellen, der aus String liest Java Basics - Anfänger-Themen 8
R ENTER in InputStream nicht lesen Java Basics - Anfänger-Themen 4
G InputStream auslesen und zurückschreiben Java Basics - Anfänger-Themen 9
R BufferedReader <-> InputStream Java Basics - Anfänger-Themen 3
R Suche geeignetes InputStream Java Basics - Anfänger-Themen 2
D InputStream -> Image Java Basics - Anfänger-Themen 6
M String zu InputStream/InputSource Java Basics - Anfänger-Themen 2
S Problem mit InputStream / flush() / BufferedReader Java Basics - Anfänger-Themen 19
C Aus ein Image-Objekt einen InputStream generieren? Java Basics - Anfänger-Themen 6
J InputStream in String umwandeln Java Basics - Anfänger-Themen 5
J InputStream ist null Java Basics - Anfänger-Themen 7
P InputStream, BufferedString Java Basics - Anfänger-Themen 3
P Problem mit JSch Java Basics - Anfänger-Themen 2
berserkerdq2 Wo ist der SInn, dass man den Stream, den ich zum Schreiben nutze, outputstream nenne? Java Basics - Anfänger-Themen 5
J Nachricht an OutputStream Java Basics - Anfänger-Themen 2
I Probleme mit OutputStream - Datei lässt sich nicht öffnen Java Basics - Anfänger-Themen 4
B Input/Output OutputStream im Paramaeter Java Basics - Anfänger-Themen 2
B OutputStream in FileInputStream? Java Basics - Anfänger-Themen 9
T ObjectInput/OutputStream Fragen zur Funktionsweise Java Basics - Anfänger-Themen 3
M ArrayList durch OutputStream in Datei Java Basics - Anfänger-Themen 9
S Objekte mit Outputstream in Safefile Java Basics - Anfänger-Themen 4
B Input/Output Socket I/O - outputStream.write(-1) Java Basics - Anfänger-Themen 2
B Socket OutputStream Java Basics - Anfänger-Themen 17
B [Erledigt] Fehlverhalten mit File, FileInput/OutputStream und FileChannel Java Basics - Anfänger-Themen 4
Forlan OutputStream Initialisieren Java Basics - Anfänger-Themen 4
F DataIn/Outputstream Java Basics - Anfänger-Themen 4
lars-sh HttpURLConnection und OutputStream Java Basics - Anfänger-Themen 4
A String in OutputStream schreiben Java Basics - Anfänger-Themen 5
D An Datei "anhängen" mit OutputStream Java Basics - Anfänger-Themen 9
S Outputstream & String? Java Basics - Anfänger-Themen 4
reibi OutputStream nach ByteOutputStream konvertieren Java Basics - Anfänger-Themen 21
P OutputStream Java Basics - Anfänger-Themen 7
H OutputStream Java Basics - Anfänger-Themen 8
M ProcessBuilder und OutputStream Java Basics - Anfänger-Themen 2
M OutputStream funktioniert nur in Endlosschleife ? Java Basics - Anfänger-Themen 4
R OutputStream direkt in StringBuffer schreiben lassen Java Basics - Anfänger-Themen 2
G ClassLoader und OutPutStream Java Basics - Anfänger-Themen 3
G Standard OutputStream out wiederherstellen Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben