Cet exemple montre le téléchargement d'une image à partir d'une URL à l'aide de InputStream
et OutputStream
de Java. Deux extraits de code sont présentés, différant par leur utilisation de la méthode OutputStream.write()
. Analysons les résultats.
Méthode 1 : write(byte[] b, int off, int len)
Cette méthode écrit une partie d'un tableau d'octets dans le flux de sortie. Le code lit efficacement les données par morceaux (1 024 octets à la fois) à partir du flux d'entrée et écrit ces mêmes morceaux dans le flux de sortie. C'est la manière correcte et efficace de gérer des données binaires comme des images.
<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>
Méthode 2 : write(int n)
Cette méthode écrit un seul octet dans le flux de sortie. Le code incorrectement interprète la valeur de retour de in.read(buf)
(qui représente le nombre d'octets lus) comme un seul octet à écrire. Cela conduit à une corruption des données.
<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>
Résultats et propriétés de l'image :
L'image téléchargée à l'aide de la méthode 1 (my-image1.jpg
) sera une image correctement rendue avec la taille de fichier attendue. La méthode 2 (my-image2.jpg
), en raison de la corruption des données, entraînera une image cassée ou partiellement rendue avec une taille de fichier probablement plus petite. Les comparaisons de fichiers image fournies démontrent cette différence visuellement et en termes de taille de fichier.
En conclusion, utilisez toujours la méthode write(byte[] b, int off, int len)
lorsque vous traitez des flux de données binaires pour garantir l'intégrité des données et éviter toute corruption. La méthode write(int n)
ne convient qu'à l'écriture d'octets uniques et est inappropriée pour gérer des blocs de données plus volumineux.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!