readXYZ von DataInputStream abbrechen/timeout auslösen

mabuhay

Bekanntes Mitglied
Hallo

Ich habe eine DataInputStream-Klasse in welcher verschiedene read-Methoden (readByte, readInt, readDouble, etc) implementiert sind. Ich kann über eine Methode setStreamType() die read-Methode wählen und somit die Daten entsprechend auslesen.

Nun ist es aber so, dass die read-Methode blockiert und nach dem ändern des Streams mit setStreamType() die "alte" read-Methode noch auf Daten wartet, bis das timeout eintritt.

Ist es nun irgendwie möglich, den timeout auszulösen oder die read-Methode anderweitig abzubrechen? Es wäre natürlich auch möglich in der setStreamType()-Methode auf das timeout zu warten, ist aber natürlich nicht so schön wenns dort blockiert.

mfg
 

Michael...

Top Contributor
Hört sich nach Design/Implementierungsfehler an. Du kannst nicht während der DataInputStream gerade mit read...() auf Input wartet, plötzlich Dich entscheiden doch lieber mit readInt() einzulesen.
 

mabuhay

Bekanntes Mitglied
Naja, dann brauche ich eine bessere idee :p

Ich habe einen Client welcher Daten über einen zweiten Kanal anfordert, also zum Beispiel 100 Integerdaten. Diese angeforderten Daten werden dann vom Server gesendet und der Client liest die Daten mit readInt(). Die nächsten angeforderten Daten werden aber als double-Werte gesendet. Da der Client die Daten anfordert, kann die Lesemethode also auf readDouble() umgestellt werden und nach dem Anfragen der Daten sendet der Server die double-Werte und sie werden vom Client mit readDouble() gelesen. Es ist also nicht so dass während dem Daten gesendet werden die read-Methode einfach umgestellt wird.

Ich habe mir schon überlegt in einer Schleife mit in.available() zu Testen ob Daten verfügbar sind und wenn nicht den Empfangs-Thread warten lassen. Dann hab ich aber eine Verzögerung beim Datenempfang falls Daten kommen wenn der Thread gerade am warten ist. Also wenn auf readInt() gestellt ist und gerade keine Daten kommen wartet der Thread. Wenn jetzt wieder integer-Werte empfangen werden muss die Wartezeit zuerst ablaufen. Falls also mal kurzzeitig keine Daten verfügbar sind würde der Thread warten, die Daten müssen aber möglichst kontinuierlich dargestellt werden darum wäre dieser Fall nicht so toll..

Was gäbe es sonst noch für eine Idee zur Umsetzung?

mfg
 

mabuhay

Bekanntes Mitglied
Es gibt eben zwei Modi, einen wo der Client eine bestimmte Anzahl Daten anfordert und den zweiten wo Daten empfangen werden bis wieder Stop gesendet wird... aber ja, da der Client ja Start/Stop kontrolliert kann ich den Empfangsthread in den Wartezustand setzen sobald ein Stop gesendet wurde oder die Anzahl Daten empfangen wurden. Und dann vor der nächsten Datenanfrage kann ich zuerst die read-Methode wählen und danach den Empfangsthread wieder aufwecken.

Vielen Dank für den Denkanstoss, werds gerade mal ausprobieren :)

mfg
 

Michael...

Top Contributor
Bei Netzwerkkommunikation arbeitet man üblicherweise mit einem Protokoll. Der Server könnte ja in den ersten x Bytes eine Info darüber senden, von welchem Typ die kommenden Daten sind und wieviele Datenobjekte gesendet werden.
 

mabuhay

Bekanntes Mitglied
Ja das ist mir klar. Ein Kanal ist der Control-Kanal, darüber läuft ein Protokoll. Der andere Kanal ist aber nur für Daten bestimmt und soll so wenig overhead haben wie möglich. Natürlich wäre es nicht viel overhead wenn nur anfangs der Daten die Information über das Datenformat gesendet wird, mein Problem war aber hauptsächlich das umwandeln der Bytes in zum Beispiel Float oder Double, und mit dem DataInputStream geht das sehr praktisch. Habs auch anderst hingekriegt aber nicht so "elegant".

mfg
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Netbeans 'Currency Converter' / DataInputStream readInt() Java Basics - Anfänger-Themen 2
P Frage zu DataInputStream Java Basics - Anfänger-Themen 4
C DataInputStream EndofFile auslesen Java Basics - Anfänger-Themen 7
missy72 Methoden Alle rekusiven Aufrufe abbrechen Java Basics - Anfänger-Themen 21
SaschaMeyer Iterationsdurchlauf abbrechen Java Basics - Anfänger-Themen 16
F Java Programm, das kleine Buchstaben in einem String zählen soll und bei großen Buchstaben oder Sonderzeichen abbrechen soll. Java Basics - Anfänger-Themen 5
O Endlosschleife abbrechen Java Basics - Anfänger-Themen 10
M JOptionPane Fehler bei "Abbrechen" des Fensters Java Basics - Anfänger-Themen 10
OSchriever Exception für Abbrechen-Schaltfläche JOptionpane Java Basics - Anfänger-Themen 9
N Abbrechen einer Eingabe endet im Fehler Java Basics - Anfänger-Themen 3
M Abbrechen Methode ohne return Java Basics - Anfänger-Themen 3
C InputStreamReader Eingabeprozess abbrechen Java Basics - Anfänger-Themen 8
F Timer abbrechen und wieder starten Java Basics - Anfänger-Themen 5
Z JTextField - getText() Methode abbrechen? Java Basics - Anfänger-Themen 8
A Gui Abbrechen Butto Java Basics - Anfänger-Themen 6
T thread abbrechen Java Basics - Anfänger-Themen 5
P Klassen Bei KeyEvent in KeyListener den Tastendruck abbrechen Java Basics - Anfänger-Themen 5
E Executorservice abbrechen? Java Basics - Anfänger-Themen 2
P Verschachtelte Schleife vorzeitig abbrechen. Java Basics - Anfänger-Themen 50
A for schleife frühzeitig abbrechen Java Basics - Anfänger-Themen 25
P Methoden Methode ohne return abbrechen? Java Basics - Anfänger-Themen 12
M Methode abbrechen funktioniert nicht?! Java Basics - Anfänger-Themen 2
M Objekterstellung abbrechen? Java Basics - Anfänger-Themen 10
F Methode abbrechen Java Basics - Anfänger-Themen 16
R JOptionPane funktioniert nicht mit Abbrechen Knopf Java Basics - Anfänger-Themen 16
J Frame schließen, Ereignis behandeln, Vorgang abbrechen Java Basics - Anfänger-Themen 4
B OOP Objekt klonen (Grundzustand), um in Editor "Abbrechen" zu können Java Basics - Anfänger-Themen 4
S [JAVA] Erstellung eines Objekts abbrechen?! Java Basics - Anfänger-Themen 7
brainray Server abbrechen mit CTRL-C Java Basics - Anfänger-Themen 2
Developer_X Endlos-Schleifen abbrechen Java Basics - Anfänger-Themen 5
S Thread warten abbrechen? Java Basics - Anfänger-Themen 5
S Schleife per Tastendruck abbrechen Java Basics - Anfänger-Themen 7
G Wie entferne ich einen "Abbrechen" Button? Java Basics - Anfänger-Themen 6
A JOptionPane -> abbrechen -> NullPointerException Java Basics - Anfänger-Themen 4
S While-Schleife nach 10 sekunden abbrechen. Java Basics - Anfänger-Themen 20
K void Methode abbrechen Java Basics - Anfänger-Themen 7
G jFileChooser auf den Abbrechen-Button reagieren Java Basics - Anfänger-Themen 3
W Schaltjahr abbrechen wenn <1583 Java Basics - Anfänger-Themen 11
G FileNotFoundException beim Drücken des "Abbrechen" Java Basics - Anfänger-Themen 3
B Programm abbrechen Java Basics - Anfänger-Themen 2
F while mit Enter-Taste abbrechen Java Basics - Anfänger-Themen 13
J Swing Komponente soll Thread starten und abbrechen Java Basics - Anfänger-Themen 6
P FileChooser richtig abbrechen? Java Basics - Anfänger-Themen 3
G REkursion vorzeitig abbrechen Java Basics - Anfänger-Themen 4
G while-Schleife von aussen abbrechen Java Basics - Anfänger-Themen 8
L read() (von bufferedReader) abbrechen Java Basics - Anfänger-Themen 5
G imports einlesen und nach den imports abbrechen Java Basics - Anfänger-Themen 4
L Ablauf abbrechen und zurück Java Basics - Anfänger-Themen 20
V JOP.showInputDialog Abbrechen Button, Exception abfangen Java Basics - Anfänger-Themen 2
G while-Schleife global abbrechen Java Basics - Anfänger-Themen 2
N JOptionPane.showInputDialog Abbrechen abfragen Java Basics - Anfänger-Themen 5
N Konsole: while Schleife durch Tastensruck abbrechen Java Basics - Anfänger-Themen 4
S For-Schleife sauber abbrechen? Java Basics - Anfänger-Themen 9
F Methode abbrechen wie mit break in Schleifen ? Java Basics - Anfänger-Themen 2
S Wie kann ich abbrechen Java Basics - Anfänger-Themen 3
J Schleife vorzeitig abbrechen Java Basics - Anfänger-Themen 7
T Programm so abbrechen, dass finally ausgeführt wird Java Basics - Anfänger-Themen 7
R Abbrechen...aber wie??? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben