InputStream, metoda read()

0

Witam, napisalem prosty programik do wczytywania znakow i pokazywania jaki to znak w tablicy ascii , jednak natrafilem na pewne problemy, w dokumentacji jest napisane ze metoda read() : " If no byte is available because the end of the stream has been reached, the value -1 is returned. " Jednak gdy daje jako warunek, zeby program zwrocil "-1" (jak nie ma zadnego bajta wiec nie ma do wczytania tekstu to zakonczy swoje dzialanie), jednak gdy wpisze np. 'a' to wyswietla mi oporcz "a = 97", w kolejnej lini jeszcze " = 13" , kolejna jedna linia wolna a w jeszcze kolejnej: " = 10" , dodatkowo program nadal nie skonczyl dzialania, co to jest te 13 i 10? i skad ten enter pomiedzy 13 i 10? i czemu wgl program nie konczy dzialania tylko wyswietla mi to? Pozdrawiam

InputStream strumien = System.in;
 
try {
    int znak;
    while((znak= strumien.read())!=-1){
        System.out.println((char)znak + " = " + znak);
    }
     
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
0

Czyli nie zwraca to nigdy -1 , poniewaz bedzie zawsze dostepny bajt na CR i LF ? i czemu na poczatku jest CR a potem dopiero LF ? na moja logike na poczatku powinien byc wyswietlany LF bo konczymy linie a dopiero potem CR (przeniesienie karetki).

0

Na moją logikę jest odwrotnie - wpierw cofamy karetkę (CR) by móc nadpisać (poprawić) a potem wysuwamy linię. W czasach prehistorycznych, drukarki igłowe w taki sposób poprawiały jakość wydruku: drukowały, cofały karetkę z drobnym przesunięciem i drukowały jeszcze raz to samo.
A co do zwracania -1, to spróbuj przerwać strumień wejściowy Ctrl+D lub Ctrl+Z (w zależności od SO).

1 użytkowników online, w tym zalogowanych: 0, gości: 1