Entsperren von InputStream.read() auf Android?

Habe ich einen thread, in dem die read() Methode eines InputStream in einer Schleife aufgerufen wird. Wenn es keine bytes mehr gelesen, der stream wird blockiert, bis neue Daten eintreffen.

Wenn ich den Anruf close() auf die InputStream aus einem anderen thread, der stream geschlossen wird, aber die blockiert read() nennen, bleibt immer noch gesperrt. Ich würde davon ausgehen, dass die read() Methode sollte nun zurück, mit einem Wert von -1 an das Ende des Streams, muss es aber nicht. Stattdessen bleibt es blockiert mehrere Minuten, bis ein tcp-timeout Auftritt.

Wie entblocke ich den close() nennen?

Edit:

Offenbar, die regelmäßige JRE werfen wird SocketException sofort, wenn der Strom oder die Buchse blockieren read() Anruf entspricht, ist close()'d.... Die Android-Java-runtime, die ich benutze, jedoch nicht.

Irgendwelche Hinweise auf eine Lösung für die Android-Umgebung würde sehr geschätzt werden.

  • Ich bin kein java-Typ, aber wenn Sie Steuern den app/thread senden den Strom hinab, konnte nicht senden Sie eine End-of-message-byte/paar bytes, die der Leser nutzen kann, um festzustellen, dass der stream geschlossen werden soll?
InformationsquelleAutor tajmahal | 2011-07-05
Schreibe einen Kommentar