BufferedReader.readLine erkennt Zeilenende nicht

Hallo,

ich schreibe über einen Mikrocontroller, auf dem ein C Programm läuft, auf die serielle Schnittstelle eine Zeichenkette, die mit einem Zeilenumbruch beendet wird. In meiner Java-Anwendung möchte ich den InputStream über einen BufferedReader.readLine() auswerten.

Da readLine() aber aus irgendeinem Grund den Zeilenumbruch am Ende nicht erkennt, wird folgende Exception geworfen:

java.io.IOException: Underlying input stream returned zero bytes
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:268)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
at java.io.InputStreamReader.read(InputStreamReader.java:167)
at java.io.BufferedReader.fill(BufferedReader.java:136)
at java.io.BufferedReader.readLine(BufferedReader.java:299)
at java.io.BufferedReader.readLine(BufferedReader.java:362)
:

In C verwende ich als Zeilenumbruch '\n' (also 0x0A und 0x0D), habe aber auch schon \r\n probiert (was auch nicht funktioniert hat).

Das C-Programm habe ich mit PuTTY getestet, das \n wird dort auch zu einem Zeilenumbruch. Die Java-Applikation funktioniert auch wenn ich in PuTTY irgendetwas hineinschreibe und Enter drücke, aber miteinander funktionieren die beiden nicht ...

;(

mfg
kabellutscher
 

hansmueller

Bekanntes Mitglied
Hallo,

kenne mich mit dem Thema eigentlich nicht aus, aber wenn ich mir die Fehlermeldung ansehe, könnte das Problem doch eher daran liegen, daß im ImputStream keine Zeichen vorhanden sind ->
Code:
Underlying input stream returned zero bytes
. Vielleicht klappt die Verbindung mit der seriellen Schnittstelle nicht richtig.

MfG
hansmueller
 
Ich habe es jetzt so probiert, dass ich die Übertragung im C-Programm mit '$' beende. In Java habe ich Zeichen für Zeichen mit InputStream.read() eingelesen und nach '$' abgefragt, das funktioniert soweit. Der InputStream ist also nicht leer, BufferedStream.readLine() liefert wahrscheinlich erst ein Ergebnis, wenn es einen Zeilenumbruch erkannt hat, und das tut es nicht ...

Schön langsam bin ich mit meinem Latein am Ende, 0x0A und 0x0D in C sind wohl auch in Java 0x0A und 0x0D, oder? ???:L
 

hansmueller

Bekanntes Mitglied
Hallo,

ich weiß jetzt, was du falsch machst.

\n ist eine sogenannte Escape-Sequenz, die nur im Quellcode verwendet wird.

Du darfst nicht 0x0A und 0x0D verwenden, denn das sind die Zeichen "\" und "n", sondern den echten Zeilenumbruch bzw. das Steuerzeichen dafür. (habe ich gerade nicht zur Hand.)

NACHTRAG: Habe gerade nachgeschlagen, 0x0A und 0x0D sind tatsächlich die Zeichen für Zeilenvorschub und Wagenrücklauf. War etwas vorschnell. Also vergiß den Müll wieder, den ich geschrieben habe. Sorry :oops:

MfG
hansmueller
 
Zuletzt bearbeitet:

hansmueller

Bekanntes Mitglied
Hallo,

ich habe eine andere Idee.

Wenn du schon ein Testprogramm hast, mit dem du Zeichen für Zeichen lesen kannst, dann teste doch einfach, was Java bei dem Zeichen für den Zeilenumbruch ausgibt.

MfG
hansmueller
 

Atze

Top Contributor
muss der reader denn das ende selbst kennen. wäre sicher nur n workaround (denn eigentlich sollte das mit readline ja klappen) aber kannst du nicht die zeichen mit read() einzelnd lesen und den zeilenunbruch selber suchen?
 

HoaX

Top Contributor
Vorweg sei mal gesagt, dass \n == 0x0a, und \r == 0x0d. Im ersten Post steht das gänzlich falsch.

Ansonsten kann man nachd er Zero-Bytes-Meldung auch einfach googlen, und findet dann das hier: [Rxtx] Underlying input stream returned zero bytes

Wenn du im C-Code \r\n sendest, dann sollte das von Java auf jeden Fall erkannt werden. Das Problem wird wohl er sein, dass Java so schnell liest, das noch keine neue Daten da sind und dann vom RXTX der genannte Fehler geschmissen wird.
 
Ich habs jetzt noch einmal mit DataInputStream.readLine() probiert, ist zwar daprecated, funktioniert aber!

@HoaX: in C wird \n zu 0x0A und 0x0D, in Java ist das anders

Das einzige Problem, das ich jetzt noch habe, ist das bei der Übertragung immer die ersten Paar Zeichen verloren gehen. Sind den die Bytes in einem InputSteram nicht automatisch gepuffert?
 

Crian

Top Contributor
Vielleicht ist es dann einfacher, wenn du das C-Programm eine Datei erstellen lässt, die du mit dem Java-Programm einliest. Falls das bei deiner Aufgabenstellung möglich ist.
 

L-ectron-X

Gesperrter Benutzer
Originalbeitrag wegen Verletzung der Forumregeln und der Netiquette entfernt.

ja is klar ihr ***** mods ... geht einfach sterben ...
nur weil ichs so entnervt geschrieben hab weil so viele immer noch so ******* sind und nich mal googlen löscht ihr gleich wieder wahllos meine threads ...

***** euch einfach mal ...
Und genau wegen diesen verbalen Entgleisungen, werden auch alle weiteren Threads gelöscht werden, die du in einer solchen Form veröffentlichst.
Man kann sich auch im Griff haben, wenn andere Laute nicht so sind oder reagieren, wie man es persönlich von ihnen erwarten würde.

Und von dir erwarte ich, dass du, wenn es dir hier nicht gefällt, einfach nicht mehr her kommst.
Du kannst dir 'ne Menge Ärger sparen - in deinem eigenen Interesse.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A bufferedReader readline, encoding Allgemeine Java-Themen 5
V wie bufferedreader.readline() unterbrechen? Allgemeine Java-Themen 4
D BufferedREader#readLine Allgemeine Java-Themen 20
J BufferedReader br.readLine(); Allgemeine Java-Themen 22
conan2 BufferedReader.readLine() von anderem Thread aus beenden Allgemeine Java-Themen 4
N readLine() von BufferedReader hält das Programm fest/auf! Allgemeine Java-Themen 10
W Socket.setSoTimeout -> BufferedReader -> Default value Allgemeine Java-Themen 4
kodela Unterschiedliches Verhalten von BufferedReader Allgemeine Java-Themen 3
D BufferedReader bricht nach 1248 Iterationen ab Allgemeine Java-Themen 14
C BufferedReader/BufferedWriter schreibt nicht alle Bytes Allgemeine Java-Themen 2
C TCP Server und BufferedReader Leerstring im Stream? Allgemeine Java-Themen 5
A BufferedReader ohne System.in Allgemeine Java-Themen 9
J BufferedReader Datei einlesen Allgemeine Java-Themen 8
Messoras Der BufferedReader mag mich nicht Allgemeine Java-Themen 47
C Threading mit BufferedReader/InputStream & sockets Allgemeine Java-Themen 0
J BufferedReader OutOfMemory umgehen? Allgemeine Java-Themen 10
B Input/Output BufferedReader Allgemeine Java-Themen 3
O BufferedReader von ganz unten anfangen zu lesen Allgemeine Java-Themen 7
S BufferedReader/PrintWriter an einer HTML Allgemeine Java-Themen 6
M BufferedReader: Vom Logfile zur Datenbank Allgemeine Java-Themen 6
S Null Pointer Exception bei BufferedReader Allgemeine Java-Themen 4
D 'InputStreamReader' & 'BufferedReader' führen zu "cannot find symbol"-Fehler Allgemeine Java-Themen 3
D Scanner leer aber bufferedReader nicht?! Allgemeine Java-Themen 2
Developer_X Java BufferedReader mit URL Allgemeine Java-Themen 5
Semox Fehler - Zuweisung aus BufferedReader an Variable Allgemeine Java-Themen 3
S Exception beim BufferedReader Allgemeine Java-Themen 3
G getFilePointer in BufferedReader? Allgemeine Java-Themen 2
D (BufferedReader) inLine() "verschluckt" zeilen ? Allgemeine Java-Themen 2
M BufferedReader.read(char[] cbuf) liefert falsche Werte? Allgemeine Java-Themen 4
W Frage zu BufferedReader Allgemeine Java-Themen 2
K Wie kann ich einen BufferedReader beschleunigen? Allgemeine Java-Themen 4
B while mit BufferedReader beenden Allgemeine Java-Themen 5
F Zu große Werte beim byteweisen Lesen mit BufferedReader.read Allgemeine Java-Themen 5
S BufferedReader problem Allgemeine Java-Themen 11
D BufferedReader in image umwandeln Allgemeine Java-Themen 3
M BufferedReader input - hängt sich auf Allgemeine Java-Themen 4
C Probleme mit URL und BufferedReader Allgemeine Java-Themen 6
C BufferedReader oder DataInputStream Allgemeine Java-Themen 4
M Store a String in a BufferedReader Allgemeine Java-Themen 2
kodela Byte Order Mark (BOM) bei readLine() ignorieren Allgemeine Java-Themen 5
S readLine() liest nur jede 2. Zeile Allgemeine Java-Themen 3
P readLine() liest nur jede dritte Zeile? Allgemeine Java-Themen 3
J RandomAccessFile readLine(); Allgemeine Java-Themen 5
S Stream ReadLine() Allgemeine Frage Allgemeine Java-Themen 5
S readLine oder sowas? Allgemeine Java-Themen 13
R read/readline blockiert Allgemeine Java-Themen 5
B Scanner erkennt keinen Text in Textdatei, obwohl welcher drinsteht Allgemeine Java-Themen 10
M Programm erkennt String aus .txt Datei nicht Allgemeine Java-Themen 3
T Swing TrayIcon erkennt links klick nicht (Mac) Allgemeine Java-Themen 2
V VisualVM Was erkennt ihr hier? Allgemeine Java-Themen 9
G RegEx erkennt nicht Allgemeine Java-Themen 2
L Tomcat erkennt Share nicht Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben