Wie nutze ich InputStream?

Anfaengerin

Mitglied
Hallo, wie nutze ich Inputstream am Besten in Kombination mit der Methode available? Ich will ein Zeichen einlesen lassen. Muss ich wie bei der Klasse Scanner Inputstream erst importieren? Wie ist die Syntax?
 

KonradN

Super-Moderator
Mitarbeiter
Generell musst Du keine Klassen importieren. Du kannst das Importieren als eine Art Verzeichnis ansehen, das dafür sorgt, dass Du den vollen Namen des Klasse (inkl. Package) nicht angeben musst.

Also wie ein Adressbuch. Du brauchst keinen Eintrag im Adressbuch um mit einem Routenplaner eine Route zu berechnen. Nur dann musst Du halt dem Routenplaner die ganze Adresse geben. Mit einem Eintrag reicht es, dem Routenplaner zu sagen, dass Du zu dem Adressbucheintrag möchtest.

Konkret für InputStream bedeutet dies:

Du kannst den InputStream importieren und dann direkt auf InputStream zugreifen:
Java:
import java.io.InputStream;

public class MyClass {
    private InputStream myStream;
}

==> Du hast einen import auf java.io.InputStream und daher kannst Du den InputStream direkt nutzen.

Java:
public class MyClass {
    private java.io.InputStreammyStream;
}

==> Du hast keinen import, daher musst Du bei Klassen den vollen Namen angeben incl. Package.

Dann ist wichtig: Wenn Du etwas zu Klassen des Java Frameworks wissen willst: Schau Dir die Dokumentation an. Diese findest Du z.B. unter:

Um so einen Link zu finden kannst Du auf die Startseite der JavaDoc Dokumentation gehen:
Oben Rechts ist ein Suchfeld - da einfach eingeben: InputStream und schon findest Du die Anleitung.

Hier kannst Du dann einzelne Bytes einlesen. Wichtig ist: InputStream kennt nur einzelne Bytes. Die Bedeutung dieser Bytes (also "Zeichen") ist einem InputStream nicht bekannt. Hier müsstest Du entweder die Bedeutung selbst geben oder Du müsstest eine Klasse verwenden, die dies für Dich macht. Dabei ist wichtig: Es gibt eine feste Zuweisung. Es gibt viele unterschiedliche mögliche Umwandlungen ("Encodings").

Evtl. reicht es einfach für Deine Belange, dass Du hier auf sogenannte ASCII Zeichen prüfst. Dies ist ein Encoding, welches für einige übliche Encodings übereinstimmt und die auch über den Datentyp char in Java verwendet werden kann. So kannst Du z.B. einfach ein byte einlesen und den Wert in ein char umwandeln um dann das char anzuzeigen. Also ohne InputStream wäre das dann z.B. sowas:

Java:
        byte b = 65; // 'A'
        char c = (char) b;
        System.out.println(c);

Das ist aber nicht ganz korrekt, was Du merken wirst, wenn Du Sonderzeichen verwendest.

Wenn Du Klassen haben willst, die direkt Zeichen und Strings kennen, dann wären das die Reader. So kannst Du z.B. ein InputStreamReader auf einem InputStream verwenden, um dann Zeichen lesen zu können.

Falls Du auf System.in arbeiten willst, wäre hier noch der Hinweis wichtig: Durch die verwendung von InputStream Methoden verändert sich nichts am typischen Verhalten der Konsole in Java. Auch wenn Du da einzelne Bytes lesen kannst, werden diese erst nach einem Druck auf Return / Enter bereitgestellt.
 

KonradN

Super-Moderator
Mitarbeiter
Eine typische Anwendung ist die Prüfung, ob Daten bereit stehen zum Einlesen um nur dann ein Einlesen zu starten, wenn Daten bereit stehen. Das verhindert ein Blockieren eines Threads.

Wenn man die Dokumentation der Methode liest, dann findet sich noch der Hinweis, dass es generell als falsch angesehen wird, wenn die Methode zur Bestimmung einer Puffergröße verwendet wird. (Das ist ein typisches Pattern, das ich vor allem aus der C / C++ Welt kenne. Da wird dann erst geprüft: "Wie viel Platz brauche ich?", dann wird der benötigte Platz gefüllt und dann findet der Aufruf zum Füllen des reservierten Platzes statt.)

An der Stelle dann aber noch der Hinweis auf java.nio.* - wenn das Ziel ist, dass Aufrufe nicht blockieren, dann sind ggf. unter dem Package java.nio besser geeignete Klassen zu finden. Das aber nur als kleine Randbedingung.
 

KonradN

Super-Moderator
Mitarbeiter
Auch einmal ein konkretes Beispiel:

Java:
import java.io.IOException;

public class Test {
    public static void main(String[] args) throws IOException, InterruptedException {
        // Aufruf etwas zu lesen ohne Check -> Blockiert die Ausführung
        System.out.println("Bitte etwas eingeben ...");
        int input = System.in.read();
        char c = (char) input;
        System.out.println("Erstes Zeichen: Wert: " + input + ", Zeichen: " + c);

        // Hier geht es erst nach der Eingabe weiter und es wird alles gelesen ...
        while (System.in.available() > 0) {
            input = System.in.read();
            c = (char) input;
            System.out.println("weiteres Zeichen: Wert: " + input + ", Zeichen: " + c);
        }

        System.out.println("Alles gelesen ...");

        // Prüfen auf die Eingabe ...
        while (System.in.available() == 0) {
            System.out.print(".");
            Thread.sleep(500);
        }
        while (System.in.available() > 0) {
            input = System.in.read();
            c = (char) input;
            System.out.println("weiteres Zeichen: Wert: " + input + ", Zeichen: " + c);
        }
    }
}

Du siehst erst einmal bei der Ausführung: Er kommt zu dem ersten read() und hält dann an. Das Programm wartet, bis Du etwas eingegeben hast und die Enter/Return Taste gedrückt hast. Dann wird direkt das gelesene Zeichen ausgegeben. Dazu verwenden wir dann das einfache Umwandeln in einen char und man erkennt da den eigentlichen Wert und das Zeichen. (Habe ich beides ausgegeben).

Dann wird in einer Schleife geprüft, ob noch Zeichen vorhanden sind. Diese werden direkt gelesen. Da sollte dir dann auffallen: Das Return / Enter ist auch ein Zeichen (oder gar eine Zeichenkombination) und wird dann auch angezeigt. Dann kommt das "Alles gelesen ..."

Dann bleibt das Programm aktiv während es ständig prüft, ob eine Eingabe vorliegt. Um das deutlich zu machen, habe ich einfach einen "." ausgegeben. Und eine kurze Pause von einer halben Sekunde damit Du den Überblick hast.

Wenn dann eine Eingabe gemacht wurde, wird diese auch wieder komplett gelesen und das Programm beendet sich ohne noch einmal zu blockieren.

Das wäre also eine mögliche Anwendung. Ein Programm kann irgendwas machen und zwischendrin kann immer geprüft werden: Hat der Benutzer etwas eingegeben?

Dazu reduzieren wir den Code einfach nur auf die Schleife, die die "." ausgibt:

Java:
import java.io.IOException;

public class Test {
    public static void main(String[] args) throws IOException, InterruptedException {
        while (System.in.available() == 0) {
            System.out.print(".");
            Thread.sleep(500);
        }
    }
}

Jetzt macht das Programm etwas und sobald Du die Enter Taste drückst, beendet es sich.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
berserkerdq2 Java streams, wann nutze ich ::, also 2x Doppelpuntk bei Streams? Java Basics - Anfänger-Themen 5
berserkerdq2 Wo ist der SInn, dass man den Stream, den ich zum Schreiben nutze, outputstream nenne? Java Basics - Anfänger-Themen 5
A Wie nutze ich List<List<String>> Java Basics - Anfänger-Themen 4
D Wann genau nutze ich ein solches Interface? Java Basics - Anfänger-Themen 3
W Wann nutze ich "import"? Java Basics - Anfänger-Themen 12
N Bildbeispiel von Layout: wie nutze ich das GBLayout dafür? Java Basics - Anfänger-Themen 17
A Welches GUI nutze ich am Besten? Java Basics - Anfänger-Themen 7
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
I Dateigröße von einem InputStream oder byte[] bekommen Java Basics - Anfänger-Themen 2
berserkerdq2 inputstream und bufferedwirter /outputstream und bufferedwriter Java Basics - Anfänger-Themen 9
T Bluetooth, Inputstream Java Basics - Anfänger-Themen 0
I InputStream beim zweiten Mal fehlerhaft Java Basics - Anfänger-Themen 10
B Inputstream in file schreiben? Java Basics - Anfänger-Themen 23
B InputStream / OutputStream / PipedOutputStream und managedExecutorService Java Basics - Anfänger-Themen 3
B java.io.OutputStream zu java.io.InputStream konvertieren Java Basics - Anfänger-Themen 18
B Hilfe bei InputStream To File Java Basics - Anfänger-Themen 22
B InputStream (PDF) nach Image (PNG / JPG) konvertieren? Java Basics - Anfänger-Themen 2
B Konvertieren: Outputstream zu Inputstream Java Basics - Anfänger-Themen 13
J Was genau macht die Methode close() im InputStream? Java Basics - Anfänger-Themen 5
E InputStream im Servlet wirft Exception Java Basics - Anfänger-Themen 5
D InputStream parsen und als Bilddatei abspeichern Java Basics - Anfänger-Themen 1
G Input/Output InputStream gibt nicht die Korrekten Werte aus Java Basics - Anfänger-Themen 10
T Datentypen InputStream to list of Int (or similar) Java Basics - Anfänger-Themen 4
P bytes aus einem InputStream zählen Java Basics - Anfänger-Themen 2
P InputStream eines Musik-Streams abspielen Java Basics - Anfänger-Themen 2
I Resize Image - Einlesen von InputStream Java Basics - Anfänger-Themen 3
T Input/Output Exception bei einem InputStream Java Basics - Anfänger-Themen 2
W ProcessBuilder InputStream in Array speichern Java Basics - Anfänger-Themen 3
K InputStream erstellen Java Basics - Anfänger-Themen 4
B Input/Output Data / Buffer / File Outstream Inputstream Java Basics - Anfänger-Themen 2
L Webservice soll InputStream übergeben bekommen Java Basics - Anfänger-Themen 7
S Eigener InputStream, Hilfe bei read-Methode Java Basics - Anfänger-Themen 6
C InputStream Java Basics - Anfänger-Themen 2
O Input/Output Fragen zum InputStream Java Basics - Anfänger-Themen 7
E Input/Output Relativer Bild-Pfad für InputStream Java Basics - Anfänger-Themen 5
G Frage zu InputStream? Java Basics - Anfänger-Themen 11
E Socket InputStream "terminiert" nicht Java Basics - Anfänger-Themen 4
E Input/Output Inputstream während der Laufzeit füllen Java Basics - Anfänger-Themen 2
A Frage zu Beispiel eines Dekorierers von InputStream Java Basics - Anfänger-Themen 4
B Input/Output InputStream (JSch) in OutputStream (Blob) überführen Java Basics - Anfänger-Themen 8
P Input/Output InputStream Listener? Java Basics - Anfänger-Themen 7
M Eigener InputStream will nicht mit BufferedReader Java Basics - Anfänger-Themen 3
S Input/Output Neuen InputStream System.in setzen Java Basics - Anfänger-Themen 11
A InputStream gibt nur jede 2te Zeile aus Java Basics - Anfänger-Themen 7
J InputStream FTP Java Basics - Anfänger-Themen 8
brunothg Inputstream zu Filechannel Java Basics - Anfänger-Themen 6
K StringWriter/String nach InputStream konvertieren Java Basics - Anfänger-Themen 3
Benji0815 Inputstream aus Konsole in JTextArea Java Basics - Anfänger-Themen 14
A Problem mit InputStream Java Basics - Anfänger-Themen 4
bastiann Kann man Inputstream nur auf ein Zeichen anwenden? Java Basics - Anfänger-Themen 5
U Inputstream.read()/readLine() blockiert immer Java Basics - Anfänger-Themen 18
S Problem mit url, inputStream und bytes beim Quellcode laden. Java Basics - Anfänger-Themen 6
G Kompletten InputStream der Kommandokonsole ausgeben Java Basics - Anfänger-Themen 8
G InputStream aufrufen, ändern und zurück geben Java Basics - Anfänger-Themen 2
W Zeichen ersetzen im InputStream Java Basics - Anfänger-Themen 3
N String vom InputStream in TextArea übertragen Java Basics - Anfänger-Themen 6
A Frage zu Puffergröße bei InputStream Java Basics - Anfänger-Themen 9
G in einem inputstream auf " " abfragen? Java Basics - Anfänger-Themen 3
M Datei speichern mittels InputStream Java Basics - Anfänger-Themen 13
P InputStream in Byte-Array speichern Java Basics - Anfänger-Themen 2
G String in InputStream umwandeln? Java Basics - Anfänger-Themen 8
M Auslesen eines InputStream Java Basics - Anfänger-Themen 4
M Problem mit InputStream Java Basics - Anfänger-Themen 7
S Probleme mit InputStream- Rückgabe Java Basics - Anfänger-Themen 4
I InputStream von Konsole abfangen Java Basics - Anfänger-Themen 6
G InputStream im finally-Block schließen Java Basics - Anfänger-Themen 7
K InputStream? Java Basics - Anfänger-Themen 3
S Sockets and InputStream Java Basics - Anfänger-Themen 2
M InputStream einer Socketverbindung funktioniert nicht Java Basics - Anfänger-Themen 19
M Byte InputStream zu Zeichenformat Unicode bzw String konvert Java Basics - Anfänger-Themen 5
R InputStream erstellen, der aus String liest Java Basics - Anfänger-Themen 8
R ENTER in InputStream nicht lesen Java Basics - Anfänger-Themen 4
G InputStream auslesen und zurückschreiben Java Basics - Anfänger-Themen 9
R BufferedReader <-> InputStream Java Basics - Anfänger-Themen 3
R Suche geeignetes InputStream Java Basics - Anfänger-Themen 2
D InputStream -> Image Java Basics - Anfänger-Themen 6
M String zu InputStream/InputSource Java Basics - Anfänger-Themen 2
S Problem mit InputStream / flush() / BufferedReader Java Basics - Anfänger-Themen 19
C Aus ein Image-Objekt einen InputStream generieren? Java Basics - Anfänger-Themen 6
J InputStream in String umwandeln Java Basics - Anfänger-Themen 5
J InputStream ist null Java Basics - Anfänger-Themen 7
P InputStream, BufferedString Java Basics - Anfänger-Themen 3

Ähnliche Java Themen


Oben