2011-01-11 14 views

Odpowiedz

45

Ponieważ byte może posiadać tylko -128 aż 127, podczas gdy powinien on powrócić 0 do 255 (i -1, gdy nie ma już bajtu (tj. EOF)). Nawet gdyby powrócił byte, nie byłoby miejsca na reprezentację EOF.

Bardziej interesujące pytanie brzmi: dlaczego nie zwraca short.

+6

+1 dlaczego nie zwraca 'short', a następnie? :) – dogbane

+3

@dogbane, @BalusC - Domyślam się, że int jest szybszy niż krótki. Zestaw instrukcji w skrócie jest raczej ograniczony, więc JVM i tak by to potraktowało. Odnośnik: http://java.sun.com/docs/books/jvms/second_edition/html/Overview.doc.html#7565 – Ishtar

+2

Lub znak, który jest niepodpisany. –

2

Ponieważ EOF (koniec pliku lub ogólnie koniec danych) nie może być reprezentowany za pomocą znaków char.

+0

Nie można użyć bajtu i -1, ponieważ ta wartość jest poprawna i może wystąpić w danych. – wesoly

+0

Nie można go przedstawić za pomocą 'byte', ponieważ nie są dostępne wartości poza pasmem. * * Może być reprezentowany w dowolnym typie danych szerszym niż 8 bitów. – EJP

4

Może więc zwrócić "-1". Musi to zrobić, gdy nie ma więcej bajtów do przeczytania.

Nie można mieć to powrót bajt czasami i -1 dla EOF/nobyte/cokolwiek, więc zwraca int;)

15

Zwraca int, ponieważ gdy strumienia nie można już odczytać, zwraca -1.

Jeśli zwrócił bajt, to -1 nie może zostać zwrócone, aby wskazać błąd, ponieważ -1 jest poprawnym bajtem. Ponadto nie można zwrócić wartości powyżej 127 lub poniżej -128, ponieważ Java obsługuje tylko podpisane bajty.

Wiele razy, gdy czytasz plik, potrzebujesz niepodpisanych bajtów do przetworzenia kodu. Aby uzyskać wartości od 128 do 255, można użyć skrótu, ale używając int, bardziej efektywnie wyrównasz rejestry pamięci z magistralą danych. W rezultacie nie tracisz żadnych informacji za pomocą int, a prawdopodobnie osiągniesz trochę wydajności. Jedynym minusem jest koszt pamięci, ale szanse na to, że długo nie będziesz się wtrącał do tej int (jak ją przetworzysz i przekształcisz w char lub bajt []).

+2

Zwraca int, ponieważ po wystąpieniu * EOF * zwraca wartość -1. Gdy wystąpi błąd, zgłasza wyjątek. – EJP

1

jako dokument napisany w języku Java w InputStream#read, Bajt wartości jest zwracany jako wartość w zakresie od 0 do 255. Oznacza to, że wartość bajtu [-128 ~ 127] została zmieniona na wartość int [0 ~ 255], więc wartość zwracana może być używana do reprezentowania końca strumienia.

0

Dołączanie do BalusC answer:

    nie
  • byte aby umożliwić [0; 255] jako główny pojemności i dodatkowo -1 jak EOF spowodować
  • int służy do regulacji wynik słowa maszynowego (jeden z głównych wymogów dla operacji I/O - prędkości, więc powinny one działać tak szybko, jak możliwe!)

Wyjątek nie jest używany, ponieważ są one znacznie wolne!

Powiązane problemy