# InputStream.available() liefer immer nur 0



## Kidao (24. Dez 2007)

Ich weiß nicht wo der Hacken ist... im Emulator funktioniert alles wunderbar und .available() liefert mir die Größe der Datei aber wenn ich das Programm auf dem Handy laufen lasse, bekomme ich nur 0 als rückgabewert!
Habe schon alles versucht, auch solange nachzufragen, bis es nicht 0 ist aber da wird nur mein Speicher voll, mehr nicht.

Ich kann es einfach nicht verstehen, warum es im Emulator klappt und auf dem Handy nicht.  :cry: 

Hoffe sehr, mir kann jemand mit dem Problem helfen.

Oder Gibt es eine andere Möglichkeit die Größe einer Datei auf dem Handy zu ermitteln?

Danke im Voraus!


----------



## ice-breaker (24. Dez 2007)

Wofür brauchst du denn die größe?
Man liest doch nur mittels der read-Methode. du könntest natürlich erstmal alles lesen und mitzählen wieviel geladen wurde, aber unbedingt die Daten wieder verwerfen, net das der Speicher voll wird ^^


----------



## Kidao (24. Dez 2007)

Ich brauche das für den Ladebalken und da würde es wenig Sinn machen, die Datei zuerst zu laden, um zu wissen, was der Ladeblaken anzeigen soll.


----------



## ice-breaker (24. Dez 2007)

hast du mal in die Java-Doku zu InputStream.avaible reingesehen?



> public int available()
> throws IOException
> 
> Returns the number of bytes that can be read (or skipped over) from this input stream without blocking by the next caller of a method for this input stream. The next caller might be the same thread or another thread.
> ...


----------



## Kidao (25. Dez 2007)

Ja, habe ich schon gelesen, deswegen habe ich mich auch gewundert, wieso es im Emulator immer geklappt hat. Da habe ich immer die Dateigröße bekommen.


----------



## Triebi (25. Dez 2007)

JavaDoc hat gesagt.:
			
		

> public int available()  throws IOException
> [...]
> *This method should be overridden by subclasses.*
> 
> ...


Die Rückgabe von 0 ist wohl eher als Standardverhalten zu sehen. Der Emulator scheint available() zu überschreiben und die Dateigröße zu liefern, was das Handy-Java eben nicht macht.
Der Return-Wert dieser Methode taugt IMHO aber sowieso nicht für diesen Zweck. Hat JavaME kein File#length() oder so?


----------



## ice-breaker (25. Dez 2007)

Triebi hat gesagt.:
			
		

> JavaDoc hat gesagt.:
> 
> 
> 
> ...


jup, der Emulator hät sich nicht an Standards oO
normalerweise sind es die Handys ^^



			
				Triebi hat gesagt.:
			
		

> Der Return-Wert dieser Methode taugt IMHO aber sowieso nicht für diesen Zweck. Hat JavaME kein File#length() oder so?


nein, JavaMe ist sehr beschränkt, er könnte aber eine der abgeleiteten Klassen dafür nutzen, oder in seinem Build-Process hardcoded die Werte reinschreiben (was ich bevorzugen würde)


----------



## Kidao (27. Dez 2007)

Danke erstmal, dass Ihr euch mit meinem Problem befasst! 

Wie schon vom Ice-breaker gesagt, gibt es File leider nicht und die Werte hardcoded reinschreiben möchte ich eher nicht, weil ich an einem kleinen Busfahrplan-Programm schreibe und diese überaus wichtige Größe, die ich brauche, ist von  XML-Dateien, die man individuell mit Werten und Fahrplänen füttert, so variieren sie untereinander und von Programm zu Programm.

Meine momentane Lösung ist jetzt das Ausweichen von einem Ladebalken, zu einer einfachen "Loading..."-Animation... immerhin habe ich noch die Möglichkeit zu registrieren, wann das Parsen der XML fertig ist.

Heute morgen ist mir aber eine andere Möglichkeit eingefallen. Man könnte doch so eine Art Header-Datei erstellen, wo einfach der Name und die Größe drinstehen, diese Datei lässt sich auch blitzschnell am Start des Programms einlesen und somit hätte man alle Werte parat. 

MfG
Kidao


----------



## ice-breaker (27. Dez 2007)

Kidao hat gesagt.:
			
		

> Heute morgen ist mir aber eine andere Möglichkeit eingefallen. Man könnte doch so eine Art Header-Datei erstellen, wo einfach der Name und die Größe drinstehen, diese Datei lässt sich auch blitzschnell am Start des Programms einlesen und somit hätte man alle Werte parat.



klar geht auch, aber bei einem build muss die Datei ja auch neu erzeugt werden, daher bevorzuge ich eben das automatische einfügen der größe im build-prozess


----------

