# Probleme beim Download von GIF-Bildern



## Dandro (1. Mai 2008)

nabend,

ich habe momentan ein Problem GIF Bilder aus dem Internet herunterzuladen.
jpg/png klappt wunderbar, nur geht die Animation von gif Bilder verloren, sobald ich
sie von einer entfernte URL herunterlade.

Ich hab es auf zwei Weisen probiert.


```
BufferedImage lImage = ImageIO.read(mImageURL);
				
if (!ImageIO.write(lImage, extractFileExt(lFile), lFile)) {
	return false;
}
```

und einmal


```
byte[] lBuffer = new byte[1024];
int lCount = 0;
				
FileOutputStream lOStream = new FileOutputStream(lFile);
try {
	InputStream lIStream = mImageURL.openStream();
	try {
		while ((lCount = lIStream.read(lBuffer)) > -1) {
			lOStream.write(lBuffer, 0, lCount);
		}
	} finally {
		lIStream.close();
	}
} finally {
	lOStream.close();
}
```

Aber geht die Animation bei beiden Arten irgendwie verloren. Liegt das an dem WebServer oder an der Technik wie ich speichere?


----------



## dajos7 (9. Mai 2008)

Hi,

also die erste Variante geht bei mir auch nicht, da erstellt java bei mir eine 0KB Datei. Lädt es wohl nicht runter.

Die 2te Variante geht bei mir allerdings super.
Ich mache allerdings beim Outputstream noch ein flush(), damit auch wirklich alles aus dem Puffer auf die Platte kommt.



> flush makes sure everything you have written so far is committed to the hard disk, and the expanded file length is also committed to the disk directory, with the updated lastModified timestamp committed too.





```
package de;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;

public class MainApp {

	public static void main(String[] args) {

		try {

			URL mImageURL = new URL("http://dajos.da.funpic.de/test.gif");
			byte[] lBuffer = new byte[1024];
			int lCount = 0;

			FileOutputStream lOStream = new FileOutputStream(new File("C:\\test.gif"));
			try {
				InputStream lIStream = mImageURL.openStream();
				try {
					while ((lCount = lIStream.read(lBuffer)) > -1) {
						lOStream.write(lBuffer, 0, lCount);
					}
				} finally {
					lIStream.close();
				}
			} finally {
			     lOStream.flush();
              lOStream.close();
			}
		} catch (Exception e) {
			System.out.println("Fehler: " + e);
		}
		
	}

}
```


----------



## The_S (9. Mai 2008)

Das flush kannste dir sparen, da ein close immer ein flush aufruft  .


----------



## dajos7 (9. Mai 2008)

Hobbit_Im_Blutrausch hat gesagt.:
			
		

> Das flush kannste dir sparen, da ein close immer ein flush aufruft  .



Ja ich weiss, dachte es könnte in älteren java versionen vlt anders sein.

Aber es scheint dann wohl an dem Web Server zu liegen. Ist das Gif denn auch wirklich intakt?


----------



## Dandro (9. Mai 2008)

Sollte es eigentlich sein ... allerdings dauert das selbst im FF ewig lange zu laden. Klappt aber ohne ReadTimeout auch nicht ... vielleicht unterstützt der Webserver diese Art Request dort nicht, oder kommt einfach nicht "hinterher". So genau weiß ich das nicht ^.^


----------

