Ogólnie do wczytywania plików tekstowych powinno stosować się Reader'y, co jest zasugerowane w dokumentacji:
https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/io/FileInputStream.html
FileInputStream is meant for reading streams of raw bytes such as image data. For reading streams of characters, consider using FileReader.
Sam char w Javie jest 16-bitowy i jest dostosowany do Unicode, więcej tutaj:
https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/lang/Character.html
W Twoim przypadku jeśli w pliku były znaki, które akurat zajmują 1 bajt (czyli większość znaków na klawiaturze) to wczytało poprawnie. Spróbuj wczytać znak, zakodowany w więcej niz 1 bajcie np. taki
https://www.compart.com/en/unicode/U+0BF7
U mnie Twój kod wczytał trzy znaki, a nie jeden jak faktycznie jest w pliku. To jak wygląda znak, a jak jest reprezentowany w pamięci (zakodowany) to są dwie różne rzeczy.
Należy także wyjaśnić dlaczego, read() zwraca int - ponieważ byte ma zakres (-128) do 127, a bajty z pliku są z zakresu 0-255, stąd int.