Was verursacht den Rückgabewert false bei der Methode ready() eines BufferedReaders

ortauq

Aktives Mitglied
Ich habe eine sehr wichtige Frage.
Ich habe einen BufferedReader und der Rückgabewert von ready() ist ab einem unbestimmten Zeitpunkt in meinem Programm immer false.

Welche Ursachen kann das haben? Ich weiß was der Rückgabewert in etwa aussagt, aber ich finde einfach keine Antwort auf die Ursachen-Frage.

Was sind mögliche Ursachen, wenn ready()==false?


Ich kann euch leider nicht meinen Code schicken. Der wäre zu groß.

Aber hier ist meine Initialisierung:


mBufferedReader = new BufferedReader(new InputStreamReader(mSocket.getInputStream()));


Also mein Socket ist noch connected und nicht closed, wenn mein BufferedReader nicht mehr ready ist. Das habe ich bereits überprüft.


Ich bedanke mich jetzt schon für Ursachen-Vorschläge.
 
Zuletzt bearbeitet:

Chloroplast

Bekanntes Mitglied
"Tells whether this stream is ready to be read. A buffered character stream is ready if the buffer is not empty, or if the underlying character stream is ready. " BufferedReader (Java Platform SE 6)

ich gehe mal davon aus, dass im buffer einfach nichts mehr ist, also an der gegenstelle nichts mehr gesendet wird (oder nicht schnell genug), das würde ich doch mal überprüfen
LG Chloroplast
 

ortauq

Aktives Mitglied
Ja, so wie sich das anhört ist er wohl wirklich leer.

Kann noch etwas anderes eine Entleerung des Buffers verursachen, außer durch ein read()/readline() etc.?
 

Sen-Mithrarin

Gesperrter Benutzer
vielleicht wäre die erklärung des returns besser gewesen
True if the next read() is guaranteed not to block for input, false otherwise. Note that returning false does not guarantee that the next read will block.
Reader.ready() sagt also aus ob der nächste call von read() blockieren wird oder nicht ...
oder besser gesagt : lediglich ob der nächste call von read() definitiv nicht blockieren wird
anders ausgedrückt : wenn Reader.ready() true liefert kann man sicher sein das man read() call kann ohne das er blockierend auf weitere daten warten muss
umgekehrt ist es aber nicht garantiert das wenn false kommt read() das nächste mal blockieren wird

der sinn von ready() ist mir erlich gesagt noch nicht wirklich klar ... entweder man wartet eben auf informationen und call direkt read() und kümmert sich nicht darum was ready() liefert ... oder man baut sich einen loop der (wenn nicht korrekt aufgebaut) die cpu unnütz mit immer wieder der gleichen abfrage sinnlos auslastet (hier ist auf jeden fall Thread.sleep() erforderlich um auch andere threads dran kommen zu lassen)

ansonsten bin ich gern für wirklich sinnvolle hinweise wo man ready() nutzen kann/sollte gerne offen
 

ortauq

Aktives Mitglied
Ich habe jetzt eine etwas andere Theorie.

Ich erzeuge immer wieder einen neuen BufferedReader.
Den zuvor erzeugten BufferedReader schließe ich vorher, setze ihn auf null.

Also es gibt keine Referenz mehr auf den zuvor erzeugten BufferedReader.
Dann erzeuge ich einen neuen.

Dieses neue erzeugen funktioniert 1-3 Mal, dann habe ich ein blockierendes read() (Zum testen habe ich vor dem read() das ready() abgefragt).

Gibt es denn eine Beschränkung von erzeugbaren BufferedReader?
 

Sen-Mithrarin

Gesperrter Benutzer
ah .. also wohl doch mal wieder so n typischer anfänger fehler

1) hole dir EINMAL vom Socket den Stream
2) packe diesen EINMAL in einen (Buffered)Reader
3) arbeite immer nur mit diesem EINEM Reader
4) nutze close() immer erst AM ENDE der kompletten verbindung > denn close() wird immer weiter gegeben bis es implementiert wird ... oder im fall eines SocketStreams durch eine native methode verarbeitet wird

grund : jedes mal wenn du den Stream in eine neue Klasse packst ziehen diese die daten erstmal raus bis ihr eigener buffer gefüllt ist ... lesen also erstmal den stream leer ...
dann machst du noch einen fatalen fehler : close()
so bald du close() auf irgendeinen stream aufrufst wird dieser ohne rückfrage geschlossen ... und dann auch nicht nur die aktuelle instanz sondern durch alle instanzen die noch dazwischen hängen bis es "ganz unten" dann aufläuft und den stream dicht macht

das du danach dann überhaupt noch ready() und read() call kannst ohne eine IOException zu bekommen weil der stream schon geschlossen wurde ... keine ahnung was dein code da macht ... dürfte aber eigentlich gar nicht funktionieren

und das "wegwerfen" der instanzen sorgt dann noch dafür das die vom stream gelesenen aber noch nicht verarbeiteten daten im nirgendwo landen



poste mal bitte deinen code ... ich denke das da noch ganz andere fehler drin sind die zu noch weiteren problemen führen werden ...
 

ortauq

Aktives Mitglied
Es würde zu lange dauern diesen code zusammenzukürzen.
Ich kann dir wirklich nur eine Beschreibung geben.
Aber hier noch einmal ganz ausführlich:


Eine GUI besitzt einen start und einen Stop-Button.
Bei einem Klick auf Start wird ein Thread erzeugt.
Dieser Thread erzeugt einen Socket. Daraus gewinne ich einen PrintWriter und einen BufferedReader.
Diese beiden dienen zur Kommunikation.

Bei einem Klick auf Stop, wird der Thread beendet und alle Sockets/Reader/Writer werden geschlossen und auf null gesetzt.

Also jeder Thread erzeugt seinen ganz eigenen Socket mit eigenen Reader & Writer. Die gibt es nur lokal in diesem Thread.


Wenn ich start klicke, dann stop und dann wieder start, dann müssten die Reader und Writer völlig unabhängig voneinander sein. Sind sie aber anscheinend nicht.

Ich kann 2-3 Mal start&Stop drücken und alles funktioniert.
Ab dem 3. bzw. 4.Mal lässt läuft die kommunikation mit dem BufferedReader gar nicht mehr.

Ich verstehe das nicht. Die BufferedReader dieser Threads kennen sich in keinster Weise.
Als ob mein Programm sagt: "Du hattest seit dem Programmstart genug Zeit mit dem BufferedReader verbracht. Ab jetzt verweigere ich dir jede Kommunikation über den BufferedReader. Auch wenn es ein ganz neuer BufferedReader ist".
 

Sen-Mithrarin

Gesperrter Benutzer
du sollst den code auch nicht kürzen ... da du sonst vermutlich genau die stellen rauskürzt die den fehler verursachen ... du sollst ihn wenn dann schon komplett posten ...


und wenns hier mit dem zeichenlimit nich hinhaut gibt es immer noch Pastebin.com - #1 paste tool since 2002!

ist richtig ... wenn wirklich alles sauber in einzelnen threads läuft ... sollten sich weder die sockets noch die streams letztenendes kennen ... ich vermute du hast irgendwo doch unbewusst noch ne brücke geschlagen die so nicht hingehört ... vielleicht irgendwo was static ...

wie gesagt : ohne (kompletten) code wird es rätzelraten
 

ortauq

Aktives Mitglied
Ich habe derweil die Sache mit einem sehr kurzem sleep() gelöst.
Weder ich, noch Kollegen verstehen, weswegen das ganze nun funktioniert, aber was solls. Die Millisekunde stört in meiner Anwendung keinen.

Trotzdem danke für eure hilfe ^^
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Fehlerhafter Datenstrom verursacht Exeption Java Basics - Anfänger-Themen 4
T Thread 2x starten verursacht Exception Java Basics - Anfänger-Themen 3
A Warum verursacht Scanner.nextInt() einen Fehler Java Basics - Anfänger-Themen 10
berserkerdq2 Warum soll ich shuffle nutzen, um bei Rückgabewert Collection eine Liste zurückzugeben? Java Basics - Anfänger-Themen 3
S Methoden Return Rückgabewert wird nicht übergeben Java Basics - Anfänger-Themen 8
B Rückgabewert boolean Java Basics - Anfänger-Themen 8
R Frage zu Methoden (Rückgabewert u. ohne.) Java Basics - Anfänger-Themen 2
H Array wird als Rückgabewert nicht akzeptiert? Java Basics - Anfänger-Themen 2
L Methoden Rückgabewert Verbergen / nicht mit ausgeben Java Basics - Anfänger-Themen 4
H Problem mit Rückgabewert Java Basics - Anfänger-Themen 7
R Boolean Methode Rückgabewert if() Java Basics - Anfänger-Themen 1
FelixN Array mit verschiedene Datentypen als Rückgabewert? (Long und Double) Java Basics - Anfänger-Themen 3
F Pascalsches Dreieck mit Rückgabewert Java Basics - Anfänger-Themen 2
D Dezimal zu Dual mit Rückgabewert Java Basics - Anfänger-Themen 39
Curtis_MC Methoden Rückgabewert von BiPredicate Java Basics - Anfänger-Themen 6
B Array als Rückgabewert in der Methode Java Basics - Anfänger-Themen 1
T Rückgabewert Problem Java Basics - Anfänger-Themen 2
A Methoden Rückgabewert Java Basics - Anfänger-Themen 6
I Referenz auf Klasse als Rückgabewert Java Basics - Anfänger-Themen 7
H Variablen Void und der Rückgabewert Java Basics - Anfänger-Themen 6
P Rückgabewert bestimmen Java Basics - Anfänger-Themen 17
J Warum wird Array durch Methode ohne Rückgabewert verändert? Java Basics - Anfänger-Themen 5
Tarrew Generics: Erste gemeinse Oberklasse als Rückgabewert Java Basics - Anfänger-Themen 1
I Rückgabewert einer Methode in anderer Klasse verwenden Java Basics - Anfänger-Themen 2
D for-Schleife Rückgabewert Java Basics - Anfänger-Themen 6
M Rückgabewert bei Methoden Java Basics - Anfänger-Themen 6
C Rückgabewert von Kontruktoren Java Basics - Anfänger-Themen 15
S Methoden Bei Liste als Rückgabewert: IndexOutOfBoundsException Java Basics - Anfänger-Themen 1
U Methoden Zugriff auf Array von weiterer Methode einer Klasse, Rückgabewert Problem Java Basics - Anfänger-Themen 5
K Methode ohne Rückgabewert in boolean Methode ändern Java Basics - Anfänger-Themen 6
S Methoden Rückgabewert einer Methode als Parameter an eine andere Methode übergeben, geht das? Java Basics - Anfänger-Themen 5
S Rückgabewert null in Methode mit Thread Java Basics - Anfänger-Themen 2
M Anstatt 1 int Rückgabewert, mehrere Rückgaben mit Arraylist Java Basics - Anfänger-Themen 8
N Klassen constructor Rückgabewert Java Basics - Anfänger-Themen 10
C Methoden Rückgabewert von statischer Methode ignorieren Java Basics - Anfänger-Themen 8
MiMa Methode mit Rückgabewert Java Basics - Anfänger-Themen 2
feardorcha Methodenaufruf Übergabe- und Rückgabewert Java Basics - Anfänger-Themen 5
T Variablen Rückgabewert aus einer Schleifen-Methode Java Basics - Anfänger-Themen 8
D Methode mit Rückgabewert Java Basics - Anfänger-Themen 5
K Rückgabewert einer Klassenmethode Java Basics - Anfänger-Themen 7
J Methoden mit und ohne Rückgabewert Java Basics - Anfänger-Themen 22
D Erste Schritte Als Rückgabewert Klasse Java Basics - Anfänger-Themen 5
D Rückgabewert Pixelgrabber Java Basics - Anfänger-Themen 3
S ArrayList und Rückgabewert Java Basics - Anfänger-Themen 2
T Methode - Rückgabewert Schreibweise Java Basics - Anfänger-Themen 6
S Interface Rückgabewert Java Basics - Anfänger-Themen 3
F if Anweisung mit Rückgabewert? Java Basics - Anfänger-Themen 4
I Rückgabewert von JSlider Java Basics - Anfänger-Themen 15
B Methoden, Rückgabewert und Verknüpfungen Java Basics - Anfänger-Themen 15
V OOP Klassen Methoden Rückgabewert Java Basics - Anfänger-Themen 15
C Datentypen Rückgabewert von "new FileInputStream" Java Basics - Anfänger-Themen 4
S Datentypen String mit fester Länge (Rückgabewert einer Methode) Java Basics - Anfänger-Themen 2
O Rückgabewert mit unterschiedlichen Datentypen Java Basics - Anfänger-Themen 10
G List als Rückgabewert einer rekursiven Methode (Baum) Java Basics - Anfänger-Themen 3
T Array als Rückgabewert einer Methode Java Basics - Anfänger-Themen 3
A Rückgabewert ändert sich? Java Basics - Anfänger-Themen 9
C Thread mit Rückgabewert? Java Basics - Anfänger-Themen 4
S Rückgabewert einer Instanzvariable Java Basics - Anfänger-Themen 2
K rückgabewert combobox Java Basics - Anfänger-Themen 15
M Methoden mit Rückgabewert Java Basics - Anfänger-Themen 4
B Vector<Point> als Rückgabewert Java Basics - Anfänger-Themen 23
C Null als Rückgabewert Java Basics - Anfänger-Themen 7
O String[] Array als Rückgabewert Java Basics - Anfänger-Themen 7
G setValueAt Rückgabewert verarbeiten? Java Basics - Anfänger-Themen 12
P Methode mit 2 unterschiedlichem Rückgabewert Java Basics - Anfänger-Themen 10
L Prozess rückgabewert? Java Basics - Anfänger-Themen 5
I "Rückgabewert" von EditorFenster Java Basics - Anfänger-Themen 6
A ActionPerformed Methode ohne Rückgabewert Java Basics - Anfänger-Themen 12
G Rückgabewert bei JInternalFrame ? Java Basics - Anfänger-Themen 2
M Rückgabewert Java Basics - Anfänger-Themen 4
L Rückgabewert Java Basics - Anfänger-Themen 7
K Frage zu Rückgabewert List und ArrayList Java Basics - Anfänger-Themen 6
D Methode aufrufen funktioniert nicht ganz - Rückgabewert Bool Java Basics - Anfänger-Themen 12
M Rückgabewert einer Methode Java Basics - Anfänger-Themen 6
P Array als Rückgabewert Java Basics - Anfänger-Themen 4
halla Array an Methode übergeben / Array als Rückgabewert Java Basics - Anfänger-Themen 2
L Rückgabewert in Konstruktor? Java Basics - Anfänger-Themen 4
R Problem mit Rückgabewert Java Basics - Anfänger-Themen 5
M Null-Rückgabewert von Methoden = sauberes programmieren? Java Basics - Anfänger-Themen 3
D Rückgabewert einer Methode Java Basics - Anfänger-Themen 25
M JFileChooser Rückgabewert Java Basics - Anfänger-Themen 2
Niki_Tesla Rückgabewert Java Basics - Anfänger-Themen 2
A Hashtable als Rückgabewert Java Basics - Anfänger-Themen 3
A Methode mit Rückgabewert Java Basics - Anfänger-Themen 3
I String Expression mit Java validieren (true / false) Java Basics - Anfänger-Themen 34
M Was habe ich hier falsch, dass wenn ich z.B.: 11 eingebe mir false zurück gegeben wird? Java Basics - Anfänger-Themen 2
C Objekt1.equals(Objekt2) = immer false. Wieso? Java Basics - Anfänger-Themen 22
T Invertierung !(false/true) Java Basics - Anfänger-Themen 11
H Koordinateneingabe im 2D Array soll true/false zurückgeben Java Basics - Anfänger-Themen 5
M Wie gebe ich true or false aus? Java Basics - Anfänger-Themen 9
J HashSet Methode contains liefert false (hash Methode überschrieben) Java Basics - Anfänger-Themen 3
helldunkel While Schleife trotz false Java Basics - Anfänger-Themen 4
M TextArea scrollbar bei editable false Java Basics - Anfänger-Themen 5
M Erste Schritte while boolean=false läuft nur bei true??? Java Basics - Anfänger-Themen 23
J Array Muster mit true und false Java Basics - Anfänger-Themen 6
I set contains false Java Basics - Anfänger-Themen 11
N Boolean Werte - immer "false" Java Basics - Anfänger-Themen 5
B setOpaque(false) funktioniert nicht Java Basics - Anfänger-Themen 16
C ActionEvent mit CheckBox (true und false) Java Basics - Anfänger-Themen 6
M !boolean das selbe wie boolean == false? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben