Frage

Ich verwende java.util.Scanner für Dinge wie nextInt () und alles funktioniert gut, solange ich eine java.lang.Readable wurde mit (ein und nur Konstruktorargument). Wenn ich jedoch geändert, um eine Input stattdessen Scanner.nextInt zu verwenden () nie zurückkehrt. Weißt du, warum?

Meine Umsetzung der Input sieht wie folgt aus:

private static class ConsoleInputStream extends InputStream {
    ...
    private byte[] buffer;
    private int bufferIndex;
    public int read() throws IOException {
        ...
        while (...) {
            if (buffer != null && bufferIndex < buffer.length) {
                return buffer[bufferIndex++];    // THE COMMENT!
            }
            ...
        }
        ...
    }
}

Wenn ich die Daten von KOMMENTAR drucke ich (richtig) erhalten Sachen wie ‚1‘, ‚2‘, ‚\ n‘ für „12 \ n“ usw. Gibt es eine Scanner-Verbindung, ohne Wissen zu mir, dass dieses Verhalten?

War es hilfreich?

Lösung

Von dem javadocs für Input der read () Methode:

„Rückkehr: das nächste Byte von Daten, oder -1, wenn das Ende des Stroms erreicht ist“

Ich würde vermuten, dass Sie nie Rückkehr -1?

Andere Tipps

ich glaube, das Problem mit dem selbstgebauten ist Input. Warum haben Sie Ihre eigene bauen, anstatt einfach nur mit System.in?

Update:

  

Gesucht Eingabe von einem JTextField.

OK, habe es. Es ist in der Regel nicht sinnvoll zu verwenden, I / O-Handling Sachen zu lesen, die bereits vorhanden sind, in Zeichenform, aber ich kann sehen, wie das Ihr Leben leichter mit Scanner machen würde.

Dennoch könnte man wahrscheinlich selbst durch die Verwendung einer „fertige“ Input einiger Codierung und Trauer gespeichert hat. Was in den Sinn kommt, ist

InputStream is = new ByteArrayInputStream(myTextField.getText().getBytes());

Java I / O ist eklig. Werden die hellen Menschen von Sun froh sind die meisten davon eingekapselt weg für Sie.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top