System.in è un InputStream e read() legge 1 byte. Questi sono i byte così come sono che la console (o chi per essa) invia.
Pertanto se l'input arriva da una "vera" console (del S.O.), ricevi tutti i byte uno per uno, compresa la sequenza di newline, che può essere (sui Windows) CR + LF.
C'è solo un piccolo dettaglio: lo standard-input da una "vera" console di norma è "bufferizzato". Vuol solo dire che l'input non è diretto a basso livello dalla console. E tra l'altro l'input arriva alla applicazione solo quando l'utente preme invio.