InputStream.available() liefer immer nur 0

Status
Nicht offen für weitere Antworten.

Kidao

Mitglied
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

Top Contributor
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

Mitglied
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

Top Contributor
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.

The available method for class InputStream always returns 0.

This method should be overridden by subclasses.

Returns:
the number of bytes that can be read from this input stream without blocking.
Throws:
IOException - if an I/O error occurs.
 

Kidao

Mitglied
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

Aktives Mitglied
JavaDoc hat gesagt.:
public int available() throws IOException
[...]
This method should be overridden by subclasses.

Returns: the number of bytes that can be read from this input stream without blocking.
Throws: IOException - if an I/O error occurs.
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

Top Contributor
Triebi hat gesagt.:
JavaDoc hat gesagt.:
public int available() throws IOException
[...]
This method should be overridden by subclasses.

Returns: the number of bytes that can be read from this input stream without blocking.
Throws: IOException - if an I/O error occurs.
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.
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

Mitglied
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

Top Contributor
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
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M InputStream Android & Cross-Platform Mobile Apps 8

Ähnliche Java Themen

Neue Themen


Oben