Heim >Java >javaLernprogramm >Unterschied zwischen Java ByteArrayOutputStream.write(int n) und ByteArrayOutputStream.write(byte[] b, int off, int len)

Unterschied zwischen Java ByteArrayOutputStream.write(int n) und ByteArrayOutputStream.write(byte[] b, int off, int len)

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-21 18:05:13473Durchsuche

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.

Difference Java ByteArrayOutputStream.write(int n) with ByteArrayOutputStream.write(byte[] b, int off, int len) Difference Java ByteArrayOutputStream.write(int n) with ByteArrayOutputStream.write(byte[] b, int off, int len) Difference Java ByteArrayOutputStream.write(int n) with ByteArrayOutputStream.write(byte[] b, int off, int len)

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn