Ich habe eine Blob-Spalte in meiner Datenbanktabelle, die ich byte[]
in meinem Java-Programm als Mapping verwenden muss, und um diese Daten zu verwenden, muss ich sie in InputStream
oder konvertieren OutputStream
. Aber ich weiß nicht, was intern passiert, wenn ich das tue. Kann mir jemand kurz erklären, was passiert, wenn ich diese Konvertierung mache?
java
bytearray
inputstream
outputstream
GuruKulki
quelle
quelle
Antworten:
Sie erstellen und verwenden Byte-Array-E / A-Streams wie folgt:
Angenommen, Sie verwenden einen JDBC-Treiber, der die Standard- JDBC-Blob-Schnittstelle implementiert (nicht alle), können Sie auch einen
InputStream
oderOutputStream
einen Blob mit den MethodengetBinaryStream
und 1 verbinden und die Bytes direkt abrufen und festlegen.setBinaryStream
(Im Allgemeinen sollten Sie geeignete Schritte unternehmen, um Ausnahmen zu behandeln und Streams zu schließen. Das Schließen
bis
undbos
im obigen Beispiel ist jedoch nicht erforderlich, da sie keinen externen Ressourcen zugeordnet sind, z. B. Dateideskriptoren, Sockets, Datenbankverbindungen.)1 - Die
setBinaryStream
Methode ist wirklich ein Getter. Stelle dir das vor.quelle
Ich gehe davon aus, dass Sie meinen, dass "Verwenden" Lesen bedeutet, aber was ich für den Lesefall erkläre, kann für den Schreibfall grundsätzlich umgekehrt werden.
Sie erhalten also ein Byte []. Dies kann jede Art von Daten darstellen, für die spezielle Arten von Konvertierungen erforderlich sind (Zeichen, verschlüsselt usw.). Stellen wir uns vor, Sie möchten diese Daten so wie sie sind in eine Datei schreiben.
Erstens könnten Sie einen ByteArrayInputStream erstellen, der im Grunde ein Mechanismus ist, um die Bytes nacheinander an etwas zu liefern.
Dann können Sie einen 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.
Zuletzt würden Sie den InputStream in den OutputStream schreiben. In diesem Fall wird das Array von Bytes nacheinander zum Schreiben an den FileOutputStream gesendet. Dafür empfehle ich die Verwendung von IOUtils
und umgekehrt
Wenn Sie die obigen Code-Schnipsel verwenden, müssen Sie Ausnahmen behandeln, und ich empfehle Ihnen, die "Closes" in einem finally-Block durchzuführen.
quelle
Mit ByteArrayInputStream können wir das Array byte [] in einen Eingabestream konvertieren
Ein vollständiges Beispiel finden Sie hier http://www.onlinecodegeek.com/2015/09/how-to-convert-byte-into-inputstream.html
quelle
Es gibt keine Konvertierung zwischen InputStream / OutputStream und den Bytes, mit denen sie arbeiten. Sie sind für Binärdaten gemacht und lesen (oder schreiben) die Bytes einfach so wie sie sind.
Eine Konvertierung muss erfolgen, wenn Sie von Byte zu Zeichen wechseln möchten. Dann müssen Sie mit einem Zeichensatz konvertieren. Dies geschieht, wenn Sie String oder Reader aus Bytes erstellen, die für Zeichendaten erstellt wurden.
quelle
quelle
Mir ist klar, dass meine Antwort auf diese Frage viel zu spät ist, aber ich denke, die Community möchte einen neueren Ansatz für dieses Problem .
quelle
Ich denke, das ist besser, da Sie bereits einen OutputStream im Antwortobjekt haben. Sie müssen keinen neuen OutputStream erstellen.
quelle