Ich habe eine Blob-Spalte in meiner Datenbanktabelle, für die ich byte[]
in meinem Java-Programm als Mapping verwenden muss und um diese Daten zu verwenden, muss ich es in InputStream
oder OutputStream
konvertieren. Aber ich weiß nicht, was intern passiert, wenn ich das tue. Kann mir jemand kurz erklären, was passiert, wenn ich diese Konvertierung mache?Byte [] zu InputStream oder OutputStream
Antwort
Sie erstellen und verwenden Byte-Array-I/O-Streams wie folgt:
byte[] source = ...;
ByteArrayInputStream bis = new ByteArrayInputStream(source);
// read bytes from bis ...
ByteArrayOutputStream bos = new ByteArrayOutputStream();
// write bytes to bos ...
byte[] sink = bos.toByteArray();
Unter der Annahme, dass Sie einen JDBC-Treiber verwenden, der die Standard-JDBC Blob interface implementiert (nicht alle tun), können Sie auch eine Verbindung InputStream
oder OutputStream
zu einem Blob mit den getBinaryStream
und setBinaryStream
Methoden , und Sie können auch die Bytes direkt abrufen und festlegen.
(Im Allgemeinen sollten Sie geeignete Maßnahmen ergreifen, um alle Ausnahmen zu behandeln und Datenströme zu schließen. Das Schließen von bis
und bos
im obigen Beispiel ist jedoch unnötig, da sie keinen externen Ressourcen zugeordnet sind; z. B. Dateideskriptoren, Sockets, Datenbankverbindungen.)
1 - Die setBinaryStream
Methode ist wirklich ein Getter. Stelle dir das vor.
gut..sehr hilfreich –
Es gibt keine Konvertierung zwischen InputStream/OutputStream und den Bytes, mit denen sie arbeiten. Sie sind für binäre Daten gemacht und lesen die Bytes nur so wie sie sind.
Eine Konvertierung muss durchgeführt werden, wenn Sie von Byte zu Zeichen wechseln möchten. Dann müssen Sie mit einem Zeichensatz konvertieren. Dies passiert, wenn Sie String oder Reader aus Bytes machen, die für Zeichendaten gemacht werden.
+1 - Ich würde diesen Teil der Frage beantworten, aber ich bin beschäftigt :-) –
Ich gehe davon aus, dass Sie meinen, dass 'verwenden' bedeutet lesen, aber was ich für den gelesenen Fall erkläre, kann für den Schreibfall grundsätzlich umgekehrt sein.
, so dass Sie mit einem Byte [] enden. Dies könnte jede Art von Daten darstellen, die spezielle Arten von Konvertierungen benötigen (Zeichen, verschlüsselt, usw.). Lassen Sie uns so tun, als wollten Sie diese Daten in eine Datei schreiben.
Erstens könnten Sie eine erstellen, die im Grunde ein Mechanismus ist, um die Bytes zu etwas in der Reihenfolge zu liefern.
dann können Sie eine FileOutputStream für die Datei erstellen, die Sie erstellen möchten. Es gibt viele Arten von InputStreams und OutputStreams für verschiedene Datenquellen und -ziele.
Schließlich würden Sie den InputStream in den OutputStream schreiben. In diesem Fall würde das Array von Bytes der Reihe nach zum Schreiben an den FileOutputStream gesendet werden. Dazu empfehle ich IOUtils
byte[] bytes = ...;//
ByteArrayInputStream in = new ByteArrayInputStream(bytes);
FileOutputStream out = new FileOutputStream(new File(...));
IOUtils.copy(in, out);
IOUtils.closeQuietly(in);
IOUtils.closeQuietly(out);
und in umgekehrten
FileInputStream in = new FileInputStream(new File(...));
ByteArrayOutputStream out = new ByteArrayOutputStream();
IOUtils.copy(in, out);
IOUtils.closeQuietly(in);
IOUtils.closeQuietly(out);
byte[] bytes = out.toByteArray();
wenn Sie den oben genannten Code-Schnipsel verwenden Sie Ausnahmen behandeln müssen und ich empfehle Sie die ‚schließen‘ in einem finally-Block .
Ich weiß, dass meine Antwort ist viel zu spät für diese Frage, aber ich denke, die Gemeinde würde gerne a newer approach to this issue.
Circular Buffer lösen das Problem des OP nicht. In der Frage, wie geschrieben, benötigt das OP den * gesamten * Inhalt in einem einzelnen Byte-Array. –
byte[] data = dbEntity.getBlobData();
response.getOutputStream().write();
Ich denke, das ist besser, da Sie bereits einen vorhandenen OutputStream im Antwortobjekt haben. keine Notwendigkeit, einen neuen OutputStream zu erstellen.
können wir byte [] Array in dem Eingangsstrom konvertieren, indem ByteArrayInputStream
String str = "Welcome to awesome Java World";
byte[] content = str.getBytes();
int size = content.length;
InputStream is = null;
byte[] b = new byte[size];
is = new ByteArrayInputStream(content);
Für vollständige Beispiel unter Verwendung von bitte http://www.onlinecodegeek.com/2015/09/how-to-convert-byte-into-inputstream.html
output = new ByteArrayOutputStream();
...
input = new ByteArrayInputStream(output.toByteArray())
- 1. Java: OutputStream und InputStream
- 2. Suchen/Ersetzen zwischen InputStream und OutputStream
- 3. Umgang mit InputStream und OutputStream über Bluetooth in Android
- 4. Wie konvertiert man byte [] nach InputStream?
- 5. HTTPUrlConnection-Fehler (OutputStream kann nach dem Lesen aus einem inputStream nicht geöffnet werden)
- 6. Wie konvertiert man outputStream in ein Byte-Array?
- 7. OutputStream in ByteArrayOutputStream konvertieren
- 8. wkhtmltopdf outputstream & download - diaglog
- 9. Java InputStream zu ByteBuffer
- 10. Warum gibt InputStream # read() ein int und kein Byte zurück?
- 11. Die Flush-Methode von outputstream tut nichts
- 12. Wie kann ich in Java einen InputStream in ein Byte-Array (byte []) konvertieren?
- 13. InputStream lesen liest nicht die Daten
- 14. InputStream oder Reader Wrapper für die Fortschrittsberichterstattung
- 15. InputStream in PostgreSQL einfügen
- 16. Wie erkennen Sie illegale UTF-8-Byte-Sequenzen, um sie in Java-Inputstream zu ersetzen?
- 17. Wie bekomme ich den InputStream von dekomprimierten Daten aus einem InputStream von GZIPed Daten?
- 18. Java Process InputStream Fehler?
- 19. InputStreamReader in InputStream konvertieren
- 20. IOException beim Lesen von InputStream
- 21. InputStream - Umgang mit Netzwerkänderungen
- 22. InputStream, mark(), reset()
- 23. InputStream und OutOfMemory Fehler
- 24. Drucken Runtime exec() OutputStream zu Konsole
- 25. Android OkHttp InputStream java.IOException.closed
- 26. outputstream response.redirect binär
- 27. Java Socket schließend OutputStream
- 28. Android - Informationsleckfehler OutputStream
- 29. Wo ist OutputStream Implementation
- 30. Wie konvertiert man einen InputStream in einen DataHandler?
hier überprüfen soll, nicht der Titel „Array von Bytes sein ... "oder" byte array ... "oder" byte [] ... "installed" byte of array ... "? – kuester2000
Siehe das Gegenteil hier: http://StackOverflow.com/Questions/1264709/convert-inputstream-to-byte-in-java –