Heim >Java >javaLernprogramm >Unterschied zwischen Java ByteArrayOutputStream.write(int n) und ByteArrayOutputStream.write(byte[] b, int off, int len)
Dieses Beispiel zeigt das Herunterladen eines Bildes von einer URL mit Javas InputStream
und OutputStream
. Es werden zwei Codeausschnitte vorgestellt, die sich in der Verwendung der OutputStream.write()
-Methode unterscheiden. Lassen Sie uns die Ergebnisse analysieren.
Methode 1: write(byte[] b, int off, int len)
Diese Methode schreibt einen Teil eines Byte-Arrays in den Ausgabestream. Der Code liest Daten effizient in Blöcken (jeweils 1024 Byte) aus dem Eingabestream und schreibt dieselben Blöcke in den Ausgabestream. Dies ist die korrekte und effiziente Art, mit Binärdaten wie Bildern umzugehen.
<code class="language-java">String val = "https://akcdn.detik.net.id/community/media/visual/2023/03/04/sholat-jenazah_169.jpeg"; URL url = new URL(val); InputStream in = new BufferedInputStream(url.openStream()); ByteArrayOutputStream out = new ByteArrayOutputStream(); byte[] buf = new byte[1024]; int n = 0; while (-1 != (n=in.read(buf))) { out.write(buf, 0, n); // Correctly writes the chunk of bytes } out.close(); in.close(); byte[] response = out.toByteArray(); FileOutputStream fos = new FileOutputStream("D:/my-image1.jpg"); fos.write(response); // Writes the complete byte array to the file fos.close();</code>
Methode 2: write(int n)
Diese Methode schreibt ein einzelnes Byte in den Ausgabestream. Der Code interpretiert fälschlicherweise den Rückgabewert von in.read(buf)
(der die Anzahl der gelesenen Bytes darstellt) als ein einzelnes zu schreibendes Byte. Dies führt zu Datenbeschädigung.
<code class="language-java">String val = "https://akcdn.detik.net.id/community/media/visual/2023/03/04/sholat-jenazah_169.jpeg"; URL url = new URL(val); InputStream in = new BufferedInputStream(url.openStream()); ByteArrayOutputStream out = new ByteArrayOutputStream(); int n = 0; while (-1 != (n=in.read(buf))) { out.write(n); // Incorrectly writes only a single byte, corrupting the image data } out.close(); in.close(); byte[] response = out.toByteArray(); FileOutputStream fos = new FileOutputStream("D:/my-image2.jpg"); fos.write(response); fos.close();</code>
Ergebnisse und Bildeigenschaften:
Das mit Methode 1 (my-image1.jpg
) heruntergeladene Bild ist ein korrekt gerendertes Bild mit der erwarteten Dateigröße. Methode 2 (my-image2.jpg
) führt aufgrund der Datenbeschädigung zu einem fehlerhaften oder teilweise gerenderten Bild mit einer wahrscheinlich kleineren Dateigröße. Die bereitgestellten Bilddateivergleiche veranschaulichen diesen Unterschied sowohl visuell als auch hinsichtlich der Dateigröße.
Zusammenfassend lässt sich sagen, dass Sie beim Umgang mit binären Datenströmen immer die Methode write(byte[] b, int off, int len)
verwenden, um die Datenintegrität sicherzustellen und Korruption zu vermeiden. Die write(int n)
-Methode eignet sich nur zum Schreiben einzelner Bytes und ist für die Verarbeitung größerer Datenblöcke ungeeignet.
Das obige ist der detaillierte Inhalt vonUnterschied zwischen Java ByteArrayOutputStream.write(int n) und ByteArrayOutputStream.write(byte[] b, int off, int len). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!