Input/Output Inputstream verhält sich verschieden

Pfeiffy

Mitglied
Hallo,
ich habe gerade ein Problem, das ich mir nicht erklären kann, ich habe folgenden Code zum Com-Port auslesen:
Java:
    public void serialEvent(SerialPortEvent evt) {
        if (evt.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
            try {
                System.out.println(inputStream.available());

                int length = inputStream.read();
                System.out.println(inputStream.available());
               
                System.out.println(length);

                byte[] response = new byte[length];
                System.out.println(inputStream.available());
               
                int intArray[] = new int[length];
                for (int i = 0; i < length && inputStream.available() > 0; i++) {
                    int value = inputStream.read();
                    response[i] = (byte) value;
                    System.out.println("Value: " + i + " bi: "
                            + Integer.toBinaryString(value) + " int: " + value
                            + " byte: " + response[i]);
                    intArray[i] = value;
                }
........
Problem ist hierbei: bei mir zuhause am PC läuft dieser Code ohne Probleme, wenn ich es hier an meinem Arbeistplatz-PC im Büro laufen lasse brigt er keine Werte: weil der Inputstream nach "int length = inputStream.read();" leer ist und somit inputStream.available() = 0. beides sind 64-bit Systeme - es kann doch auch nicht an unterschiedlichen Java-versionen lieget?
--> ganz krank ist es, wenn ich es im Debug-Mode laufen lasse und vor "int length = inputStream.read();" einen Break setze und dann weiterlaufen lasse, dann funktioniert es.
Gruß
Dirk
 

Flown

Administrator
Mitarbeiter
Warum verwendet man überhaupt available? Das sagt nur aus, wieviele bytes gelesen werden können ohne zu blockieren, während die Klasse InputStream (also die Urklasse) bei available immer 0 liefert.
 

Flown

Administrator
Mitarbeiter
Ja, man hätte einen halben Satz dazu schreiben können, aber das wichtigere ist ja, was wolltest du damit sagen ?

Edit: bzgl. der available-Methode
weil der Inputstream nach "int length = inputStream.read();" leer ist und somit inputStream.available() = 0
Ich wollte nur damit zum Ausdruck bringen, dass available - wie ich schon gesagt habe - nichts aussagt. Es ist nur eine vage Näherung, wieviel bytes gelesen werden könnten, ohne Garantie. Wenn das dann nicht richtig implementiert ist, dann liefert es eben immer 0 zurück - wie in der Oberklasse InputStream.

Darum sollte man den Wert nicht verwenden und da java.io ein blockierendes Framework ist, sollte man es auch blockierend verwenden. Wenn man das eben nicht haben will, sollte man java.nio verwenden. Das wäre hier so grundsätzlich mein Ratschlag.
Java:
for (int i = 0; i < length && inputStream.available() > 0; i++) {
                    int value = inputStream.read();
                    response[i] = (byte) value;
                    System.out.println("Value: " + i + " bi: "
                            + Integer.toBinaryString(value) + " int: " + value
                            + " byte: " + response[i]);
                    intArray[i] = value;
                }
Dieser Codeabschnitt ist in java.io einfach nicht richtig in meinen Augen.
 

JStein52

Top Contributor
Ich würde es so einlesen:

Code:
    public synchronized void serialEvent(SerialPortEvent oEvent) {
        int data;
        int len = 0;
        if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
            try
            {
                while ( ( data = inputStream.read()) > -1 )
                {
                    if ( data == '\n' ) {
                        break;
                    }
                    buffer[len++] = (byte) data; // ein byte-Array
                }
            }
            catch ( IOException e )
            {
                e.printStackTrace();
            }
            // hier kann man was mit dem buffer machen, z.B. das:
            inputLine = new String(buffer,0,len);
        }
    }

Auf diese Art habe ich ein USB-Messgerät angeschlossen, funktioniert alles perfekt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
X Input/Output InputStream/Scanner(System.in) read()/hasNextLine() block unterbrechen Allgemeine Java-Themen 7
krgewb Problem mit Umlauten und Eszett bei InputStream Allgemeine Java-Themen 3
W Mal ein paar generelle Fragen zu InputStream und OutputStream Allgemeine Java-Themen 4
L Input/Output InputStream öffnen? Allgemeine Java-Themen 12
R Inputstream lesen mit Pointer Allgemeine Java-Themen 0
M InputStream auslesen Allgemeine Java-Themen 1
M String aus InputStream Allgemeine Java-Themen 3
C Threading mit BufferedReader/InputStream & sockets Allgemeine Java-Themen 0
B BufferedWriter in InputStream oder Zeichen-Stream in Byte-Stream Allgemeine Java-Themen 5
P Scanner als Inputstream für Java Prozess Allgemeine Java-Themen 4
E POI-InputStream selber wählen Allgemeine Java-Themen 2
S RandomAcessFile das einen InputStream wrappt..? Allgemeine Java-Themen 2
M Umwandlung ByteArrayOutputStream in InputStream Allgemeine Java-Themen 5
1 InputStream hängt Allgemeine Java-Themen 4
H Input/Output InputStream: 32-Bit-Ganzzahl (DWORD) binär lesen Allgemeine Java-Themen 5
D Datentypen Reader/InputStream wiederverwenden? Allgemeine Java-Themen 11
K Inputstream -> Bilder Allgemeine Java-Themen 23
1 InputStream liest die letzte Zeile nicht ein Allgemeine Java-Themen 2
J Java Datei aus FTP in ein INputstream Allgemeine Java-Themen 2
J InputStream Zip-File Allgemeine Java-Themen 3
F ImageIO cant create InputStream Allgemeine Java-Themen 9
S InputStream "weiterleiten" Allgemeine Java-Themen 12
T Integer aus InputStream lesen Allgemeine Java-Themen 3
T Undwandlung eines String in einen InputStream? Allgemeine Java-Themen 3
M Selbst geschriebener InputStreamReader über einen beliebigen InputStream Allgemeine Java-Themen 4
T OutputStream to InputStream Allgemeine Java-Themen 8
S von OutputStream in InputStream schreiben ohne das es blockiert..? Allgemeine Java-Themen 2
reibi BufferedImage nach InputStream Allgemeine Java-Themen 10
R InputStream zweimal lesen Allgemeine Java-Themen 2
G InputStream und File Allgemeine Java-Themen 11
B InputStream zu URL umwandeln Allgemeine Java-Themen 2
F Teile vom InputStream schreiben Allgemeine Java-Themen 9
J InputStream aus URL funktioniert nicht Allgemeine Java-Themen 7
H InputStream Problem mit externem Kommandozeilenprogramm Allgemeine Java-Themen 2
W InputStream öfters nutzen Allgemeine Java-Themen 9
R The mark method of InputStream does nothing. Allgemeine Java-Themen 4
V String oder doch InputStream? Allgemeine Java-Themen 9
A Inputstream in Outputstream umleiten Allgemeine Java-Themen 7
Nils_Langner InputStream soll sich bei neuen Daten melden Allgemeine Java-Themen 2
R InputStream - seltsamer Output Allgemeine Java-Themen 2
S java.io.InputStream.read(byte[] b) überschreiben Allgemeine Java-Themen 33
N InputStream erst ab gegebener Position Allgemeine Java-Themen 4
R InputStream Allgemeine Java-Themen 5
G InputStream kopieren? Allgemeine Java-Themen 6
D Inputstream aus StringBuffer Allgemeine Java-Themen 3
G inputstream() to imageicon() Allgemeine Java-Themen 7
D Durch OutpustStream und InputStream dateien in eine jar sch Allgemeine Java-Themen 3
G aus String einen InputStream erstellen Allgemeine Java-Themen 2
C Wie kann man im InputStream nach einer Zeichenkette suchen? Allgemeine Java-Themen 4
R Aus InputStream wieder eine Datei erzeugen? Allgemeine Java-Themen 2
N String als Inputstream Allgemeine Java-Themen 4
N Suchen in InputStream/ByteArrayOutputStream Allgemeine Java-Themen 11
M InputStream.read abbrechen Allgemeine Java-Themen 2
S Compiler-Fehler Programm verhält sich in Eclipse anders Allgemeine Java-Themen 1
D System.arraycopy verhält sich seltsam Allgemeine Java-Themen 1
C Threads Methode verhält sich merkwürdig Allgemeine Java-Themen 18
E Anwendung verhält sich unter Mac anders als Unter Windows. Allgemeine Java-Themen 4
A Warum verhält sich a+=b anders als a=a+b? Allgemeine Java-Themen 5
J Thread verhält sich seltsam Allgemeine Java-Themen 6
W float/double verhält sich seltsam Allgemeine Java-Themen 6
N Lwjgl 3d Objekt wird schmaler, wenn es sich dreht Allgemeine Java-Themen 0
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
A Eclipse hängt sich auf Allgemeine Java-Themen 7
D Image bewegt sich nicht nach Klicken auf Button Allgemeine Java-Themen 15
Viper13125 Eclipse Hängt sich auf, wenn ich SimpelDateFormat drin lasse Allgemeine Java-Themen 2
L Java überprüfen lassen, ob sich ein gegebener Pfad / das Programm an sich auf einer CD oder Festplatte befindet Allgemeine Java-Themen 14
Tiago1234 Warum hängt sich mein Programm auf? Allgemeine Java-Themen 22
C Parsen einer sich updatenden Html mithilfe von jsoup Allgemeine Java-Themen 4
Kiki01 Häufigster Buchstabe lässt sich nicht ermitteln Allgemeine Java-Themen 30
Tobero Wie berechnet man ob zwei Linien sich schneiden? Allgemeine Java-Themen 2
T Projekt baut nicht mehr/lässt sich nicht mehr ausführen Allgemeine Java-Themen 6
Tobero Wie bekomme ich in welchem Quadrat sich eine Position in einem Grid befindet Allgemeine Java-Themen 11
O Jar lässt sich auf bestimmten Pc nicht starten Allgemeine Java-Themen 18
D Anfänger versucht sich an Xtext Allgemeine Java-Themen 0
F Sich automatisch aufrufende Java-Methoden Allgemeine Java-Themen 2
kodela Inhalt eines Arrays ändert sich mysteriös Allgemeine Java-Themen 2
P JavaFX Anwendung beendet sich selbst nur als Jar Allgemeine Java-Themen 40
Drachenbauer Wie finde ich den Aufrufer zu einer Methode, die sich nicht in meinem Projekt befindet? Allgemeine Java-Themen 2
A 2D-Grafik Einfachster Ansatz, um sich wiederholende Figur in einem 2D-Image zu erkennen Allgemeine Java-Themen 1
M String lässt sich nicht Zusammenfügen Allgemeine Java-Themen 10
I Lohnt sich heutzutage der Aufwand einer Portierung für MacOS Allgemeine Java-Themen 8
G Jar lässt sich mit macOS nicht starten Allgemeine Java-Themen 9
H Erste Schritte Ausführbare Dateien lassen sich nicht starten Allgemeine Java-Themen 5
L Excel Datei löscht sich selbst im Programm - Java Allgemeine Java-Themen 3
K OOP Daten addieren sich bei GUI-Eingabe Allgemeine Java-Themen 10
K ursprüngliche ArrayList ändert sich bei Übergabe in Methode Allgemeine Java-Themen 18
N Quicksort Programm hängt sich auf Allgemeine Java-Themen 6
G Beendet sich der Thread selbst?! Allgemeine Java-Themen 3
S Compiler-Fehler IntelliJ Projektdatei lässt sich nicht erstellen. Allgemeine Java-Themen 15
J Bilder lassen sich nicht importieren Allgemeine Java-Themen 3
E GUI.jfm lässt sich nicht mehr öffnen Allgemeine Java-Themen 1
H Kennt sich jemand mit Eclipse und dem Thema Jar-File aus ? Allgemeine Java-Themen 6
S Programm hängt sich manchmal (selten) auf Allgemeine Java-Themen 9
D Best Practice Gesamten Bildschirminhalt auslesen und Email schicken sobald kein Pixel sich ändert Allgemeine Java-Themen 11
K jar-Datei lässt sich unter Windows nicht verwenden Allgemeine Java-Themen 3
X Sich wiederholende substrings finden Allgemeine Java-Themen 6
T Minimax/Alphabeta Algorithmus hängt sich auf (?) Allgemeine Java-Themen 2
Tausendsassa Threads Einen Thread sich selbst schließen lassen Allgemeine Java-Themen 17
K Java installiert sich nicht ganz Allgemeine Java-Themen 15
L Jar lässt sich nicht öffnen Allgemeine Java-Themen 12

Ähnliche Java Themen

Neue Themen


Oben