Byte[] zu InputStream oder OutputStream

Lesezeit: 3 Minuten

Benutzer-Avatar
GuruKulki

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?

  • 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

Benutzer-Avatar
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.

Benutzer-Avatar
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() )

Benutzer-Avatar
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.

Benutzer-Avatar
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.

1332900cookie-checkByte[] zu InputStream oder OutputStream

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy