Ich habe eine Blob-Spalte in meiner Datenbanktabelle, für die ich verwenden muss byte[]
in meinem Java-Programm als Mapping und um diese Daten verwenden zu können, muss ich sie konvertieren InputStream
oder 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?
Byte[] zu InputStream oder OutputStream
GuruKulki
Stefan C
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();
Angenommen, Sie verwenden einen JDBC-Treiber, der den Standard implementiert JDBC Blob-Schnittstelle (nicht alle tun), können Sie Auch verbinden a InputStream
oder OutputStream
zu einem Blob mit der getBinaryStream
und setBinaryStream
Methoden1und Sie können die Bytes auch direkt abrufen und setzen.
(Im Allgemeinen sollten Sie geeignete Schritte unternehmen, um Ausnahmen zu behandeln und Streams zu schließen. Schließen bis
und bos
im obigen Beispiel ist unnötig, da sie keinen externen Ressourcen zugeordnet sind; zB Dateideskriptoren, Sockets, Datenbankverbindungen.)
1 – Die setBinaryStream
Methode ist wirklich ein Getter. Stelle dir das vor.
Pstanton
Ich nehme an, Sie meinen, dass “Verwenden” Lesen bedeutet, aber was ich für den Lesefall erkläre, kann im Grunde für den Schreibfall umgekehrt werden.
Sie erhalten also ein Byte[]. Dies könnte jede Art von Daten darstellen, die möglicherweise spezielle Arten von Konvertierungen erfordern (Zeichen, verschlüsselt usw.). Nehmen wir an, Sie möchten diese Daten unverändert in eine Datei schreiben.
Erstens könnten Sie eine erstellen ByteArrayInputStream Dies ist im Grunde ein Mechanismus, um die Bytes nacheinander an etwas zu liefern.
dann könntest du eine erstellen FileOutputStream für die Datei, 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 würde das Array von Bytes nacheinander zum Schreiben an FileOutputStream gesendet. Dafür empfehle ich die Verwendung 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 umgekehrt
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 die obigen Codeschnipsel verwenden, müssen Sie Ausnahmen behandeln, und ich empfehle Ihnen, das Schließen in einem Endgültig-Block durchzuführen.
-
meintest du nicht – ByteArrayOutputStream out = new ByteArrayOutputStream(); stattdessen ByteArrayOutputStream out = new ByteArrayInputStream();
– Avihai Marchiano
21. Juli 2012 um 20:45 Uhr
-
CloseQuietly sollte wahrscheinlich in einer finally-Klausel stehen.
– JustinKSU
18. Februar 2014 um 15:32 Uhr
wir können byte umwandeln[] Array mithilfe von ByteArrayInputStream in den Eingabestream
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);
Ein vollständiges Beispiel finden Sie hier http://www.onlinecodegeek.com/2015/09/how-to-convert-byte-into-inputstream.html
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 einzeln so wie sie sind.
Eine Konvertierung muss stattfinden, wenn Sie von Byte zu Char 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 werden.
output = new ByteArrayOutputStream();
...
input = new ByteArrayInputStream( output.toByteArray() )
Gemeinschaft
Mir ist klar, dass meine Antwort auf diese Frage viel zu spät kommt, aber ich denke, die Community hätte gerne einen neueren Ansatz für dieses Problem.
Stas Wishnevetsky
byte[] data = dbEntity.getBlobData();
response.getOutputStream().write();
Ich denke, das ist besser, da Sie bereits einen vorhandenen OutputStream im Antwortobjekt haben. es muss kein neuer OutputStream erstellt werden.
Sollte der Titel nicht “array of bytes …” oder “byte array …” oder “byte[]…” statt “byte of array…”?
– kuester2000
7. Mai 2010 um 13:19 Uhr
Siehe die Rückseite hier: stackoverflow.com/questions/1264709/…
– Jay Taylor
5. Dezember 2011 um 20:28 Uhr