2011-01-11 16 views

Antwort

45

Da ein byte nur -128 bis 127 halten kann, während er zurückkehren sollte 0 bis 255 (und -1, wenn kein Byte mehr übrig ist (zB EOF)). Selbst wenn es byte zurückgeben würde, wäre kein Platz, um EOF darzustellen.

Eine interessantere Frage ist, warum es short nicht zurückgibt.

+6

+1 warum gibt es dann kein 'short' zurück? :) – dogbane

+3

@dogbane, @BalusC - Ich denke, weil int schneller ist als kurz. Der kurze Befehlssatz ist ziemlich begrenzt, so dass die JVM ihn trotzdem wie einen Int behandeln würde. Referenz: http://java.sun.com/docs/books/jvms/second_edition/html/Overview.doc.html#7565 – Ishtar

+2

Oder Zeichen, das nicht signiert ist. –

2

Da EOF (Ende der Datei oder allgemein Ende der Daten) kann nicht mit Zeichen dargestellt werden.

+0

Sie können Byte und -1 nicht verwenden, da dieser Wert korrekt ist und in Daten auftreten kann. – wesoly

+0

Es kann nicht mit 'byte' dargestellt werden, da keine Out-of-Band-Werte verfügbar sind. Es * kann * in jedem Datentyp dargestellt werden, der breiter als 8 Bits ist. – EJP

4

So kann es "-1" zurückgeben. Dies muss geschehen, wenn keine Bytes mehr zu lesen sind.

Sie können es ein Byte manchmal und -1 für EOF/nobyte nicht haben Rückkehr/was auch immer, also ist es ein int zurückgibt;)

15

Es gibt einen int zurück, weil der Stream, wenn er nicht mehr gelesen werden kann, -1 zurückgibt.

Wenn ein Byte zurückgegeben wurde, konnte -1 nicht zurückgegeben werden, um einen Fehler anzuzeigen, da -1 ein gültiges Byte ist. Darüber hinaus konnten Sie keinen Wert über 127 oder unter -128 zurückgeben, da Java nur signierte Bytes verarbeitet.

Viele Male, wenn man eine Datei liest, möchten Sie die vorzeichenlosen Bytes für Ihren Verarbeitungscode. Um Werte zwischen 128 und 255 zu erhalten, könnten Sie einen kurzen verwenden, aber indem Sie einen int verwenden, werden Sie die Speicherregister effizienter mit Ihrem Datenbus ausrichten. Als Ergebnis verlieren Sie keine Informationen wirklich, indem Sie einen Int verwenden, und Sie erhalten wahrscheinlich ein bisschen Leistung. Der einzige Nachteil sind die Kosten für den Speicher, aber die Wahrscheinlichkeit ist groß, dass Sie nicht lange an diesem int hängen bleiben (da Sie ihn verarbeiten und in ein char oder Byte umwandeln werden []).

+2

Es gibt ein int zurück, denn wenn * EOF * auftritt, wird -1 zurückgegeben. Wenn ein Fehler auftritt, wird eine Ausnahme ausgelöst. – EJP

1

wie das Java-Dokument sagt in InputStream#read, Das Wertbyte wird als ein int im Bereich 0 bis 255 zurückgegeben. Das heißt, der Bytewert [-128 ~ 127] wurde in den int-Wert [0 ~ 255] geändert, sodass der Rückgabewert verwendet werden kann, um das Ende des Streams darzustellen.

0

Anfügen zu BalusC answer:

  • kein byte[0 zu ermöglichen; 255] als Hauptkapazität und Additionaly -1 als Folge EOF
  • int wird verwendet, Ergebnis Maschinenwort einzustellen (eine der wichtigsten Anforderungen an den I/O-Operationen - Geschwindigkeit, so sollten sie so schnell arbeiten wie möglich!)

Ausnahme wird nicht verwendet, weil sie deutlich langsam sind!

Verwandte Themen