Je dois télécharger un fichier à partir d'une URL donnée, mais le problème est que je peux obtenir des fichiers sans extension. Afin de comprendre ce que l'extension est j'ai écrit le service suivant:Utilisation du cache à l'aide des méthodes statiques ImageIO
Plus tard, je dois télécharger cette image j'ai donc écrit:
BufferedImage image = ImageIO.read(imageURL);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ImageIO.write(image, extension, byteArrayOutputStream);
byteArrayOutputStream.flush();
byte[] imageInBytes = byteArrayOutputStream.toByteArray();
byteArrayOutputStream.close();
Le problème est que je suis dowloading le fichier deux fois - et je voudrais utiliser le cache afin d'éviter cela. Maintenant, je lis à propos de ImageIO.setUseCache(false);
mais cela ne semble pas fonctionner (peut-être que je fais quelque chose de mal ici).
Modifier: J'ai remarqué que je crée le flux d'entrée en utilisant new URL(imageURL).openStream()
- c'est le premier téléchargement que je fais, je pense que je l'ai utilisé l'une des méthodes ImageIO pour obtenir que puis le ImageIO.setUseCache(false);
fonctionnerait.
Ai-je raison?
Comment puis-je faire cela - j'ai essayé d'utiliser le ImageIO.createImageInputStream(imageURL);
mais je suis une exception:
java.lang.IllegalArgumentException: input == null!
at javax.imageio.ImageIO.createImageInputStream(Unknown Source)
Alors, comment puis-je faire?
Merci.
Avez-vous besoin d'aide pour écrire un 'InputStream' dans un fichier temporaire et la lecture de celui-ci plus tard sur? Ou faire 'image' un champ d'instance? – Raffaele
Je dois obtenir cette entréeStream d'une URL donnée et en lire plus tard – Noam
Essayez 'ImageIO.createImageInputStream (imageURL.openStream())' à la place. Je pense qu'une fois que vous avez fait cela, le cache "devrait" fonctionner pour vous, à partir de ce que j'ai lu cela fonctionne avec 'ImageInput/OutputStream' – MadProgrammer