Hallo, ich habe ein kleines Java-Problem. Ich lese mittels Java Daten von der Seriellen-Schnittstelle. Da ich nicht auf jedem PC die RXTX- oder JAVAX- Bibliothek installieren möchte, habe ich mich für die Lösung mittels der Bibliothek java.io.* und dort im Speziellen für das Objekt RandomAccessFile entschieden. Es läuft alles perfekt. Nur eine Sache nicht. Der Read-Befehl ist blockierend. Wenn ich jetzt nur ein Byte zuviel abholen möchte, bleibt meine kleine Java-Anwendung für immer stehen. Ich suche jetzt nach einer Möglichkeit die Anzahl der Bytes im Buffer abzufragen, oder einen nicht blockierenden Read-Befehl. Leider finde ich trotz langer Suche nicht. Aber vielleicht ist es auch einfach zu spät. Meine bisherige Lösung ist es den String mit einem Stringende zu markieren. Das ist mir jedoch zu wenig Fehlertolerant. Meine Idee wäre es jetzt einen Thread zu programmieren der permanent im Hintergrund läuft. Aber erstens müsste ich mich da noch in sehr vieles Einlesen und zweitens kann ich nicht glauben, dass es einen solchen Befehl nicht gibt. ;-). Vlt. Kann mir einer von Euch helfen. Grüße Samuel
Samuel Schmidt schrieb: > Ich lese mittels Java Daten von der > Seriellen-Schnittstelle Ok... Samuel Schmidt schrieb: > habe ich mich für die Lösung mittels der > Bibliothek java.io.* Welche Lösung? Quellcode wäre hilfreich. Samuel Schmidt schrieb: > das Objekt > RandomAccessFile Scheint mir wenig zielführend, wo kommt das zum Einsatz. Eine Serielle Schnittstelle kann man sicher als vieles sehen, aber bestimmt nicht als RandomAccessFile... Samuel Schmidt schrieb: > Möglichkeit die Anzahl der Bytes im Buffer abzufragen Bei einer RandomAccessFile ist die aktuelle Größe bekannt und du kannst auf jedes byte jederzeit zu greifen es gibt also keinen "buffer". Falls du einen Inputstream meinst, da gibt es die Klasse BufferedInputstream, welche z.B. die Methode available() ( http://download.oracle.com/javase/6/docs/api/java/io/BufferedInputStream.html ) Samuel Schmidt schrieb: > oder einen nicht > blockierenden Read-Befehl Das funktioniert mit dem NIO Package: http://download.oracle.com/javase/1.4.2/docs/api/java/nio/channels/package-summary.html#multiplex Alles in allem ist es aber trotzdem üblich eher Samuel Schmidt schrieb: > jetzt einen Thread zu programmieren der permanent > im Hintergrund läuft Und wenn dir das schon zu kompliziert ist solltest du eventuell erstmal was einfacheres machen, es sit nämlich keinesweg so das es für alles "einen Befehl" gibt.
Samuel Schmidt schrieb: > und dort im Speziellen für das Objekt > RandomAccessFile entschieden. Zeig Doch mal den Source, das würde mich auch interessieren, nämlich ob und wie es geht, ohne RXTX mittels RandomAccessFile die serielle Schnittstelle zu bedienen. > Meine Idee wäre > es jetzt einen Thread zu programmieren der permanent im Hintergrund > läuft. Aber erstens müsste ich mich da noch in sehr vieles Einlesen und > zweitens kann ich nicht glauben, dass es einen solchen Befehl nicht > gibt. ;-). Threads sind die (allgemeine) Lösung, damit man eben nicht für alles wieder etwas Spezielles haben muss. In den Threads darf dann auch hemmungslos sleep() eingesetzt werden, und der Algorithmus bleibt linear. Die Programmierung von Threads ist m. A. nach wesentlich einfacher und eingängiger als der Ansatz mit nur "einem Thread", in welchem man alle Dinge nicht blockierend auslegen muss.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.