3 Stimmen

Daten von einem Unix-Gerät lesen

Auf einem meiner RedHat-Linux-Server sind einige Geräte eingerichtet worden. /dev/ap und /dev/reuter. Dabei handelt es sich um AP- und Reuters-Nachrichten-Feeds. Auf der Unix-Befehlszeile kann ich "cat /dev/ap" eingeben, und es wird gewartet, bis eine Nachricht über den Feed eintrifft, und diese dann auf stdout ausgedruckt. Sobald es eine Pause im Stream gibt, wird cat beendet. Ich habe es mit "more" versucht und das gleiche Ergebnis erhalten, dasselbe mit less -f (komplette Nachricht, könnte Glück sein) und tail -f hatte in einer Stunde keine Ausgabe.

Ich weiß, dass es sich um Streams handelt, aber wenn ich versuche, einen Java BufferReader auf new Reader("/dev/ap") zu öffnen, erhalte ich keine Ausgabe. Ich verwende die folgende Ausführungsmethode:

public void run() {
    String line = null;
    while(true) {
        try {
            while((line = bsr.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}  

Ein paar Fragen:
1. Sind einige der Unix-Befehle auf das Öffnen von Datenströmen aus Dateien beschränkt, z. B. tail? 2. Was mache ich auf der Java-Seite falsch, dass ich die Ausgabe nicht erfassen kann? Falscher Stream-Typ, falscher Wrapper-Typ? Jim

5voto

trashgod Punkte 199887

Ihr Ansatz scheint vernünftig, aber readLine() legt sehr genau fest, was eine Textzeile ist. Sie können sich den Rohdatenstrom ansehen:

cat /dev/ap | hexdump -C

Sie könnten auch versuchen read() wie in diesem Fragment zu sehen ist, das sich aus /dev/zero :

BufferedReader in = new BufferedReader(new FileReader("/dev/zero"));
for (int i = 0; i < 10; i++) {
    System.out.print(in.read() + " ");
}
System.out.println();
in.close();

Nachtrag: Für serielle E/A sollten Sie Folgendes in Betracht ziehen RXTX ou ähnlich Bibliotheken.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X