2011-01-11 13 views

Respuesta

45

Debido a que un byte sólo puede contener hasta 127 -128, mientras que debería volver 0 hasta 255 (y -1 cuando no hay bytes restantes (es decir, EOF)). Incluso si devolviera byte, no habría espacio para representar EOF.

Una pregunta más interesante es por qué no devuelve short.

+6

+1 ¿por qué no devuelve un 'corto'? :) – dogbane

+3

@dogbane, @BalusC - Supongo que int es más rápido que corto. El conjunto de instrucciones para abreviar es bastante limitado, por lo que la JVM lo trataría como un int de todos modos. Referencia: http://java.sun.com/docs/books/jvms/second_edition/html/Overview.doc.html#7565 – Ishtar

+2

O char que no está firmado. –

2

Porque EOF (fin de archivo o, en general, final de datos) no se puede representar mediante char.

+0

No puede usar byte y -1 porque este valor es correcto y puede aparecer en los datos. – wesoly

+0

No se puede representar utilizando 'byte', porque no hay valores fuera de banda disponibles. * Se puede * representar en cualquier tipo de datos de más de 8 bits. – EJP

4

Por lo que puede devolver "-1". Debe hacer eso cuando no haya más bytes para leer.

No se puede tener que devolver un byte de veces y -1 para EOF/nobyte/lo que sea, por lo que devuelve un int;)

15

Devuelve un int porque cuando la transmisión ya no se puede leer, devuelve -1.

Si devolvió un byte, entonces -1 no se pudo devolver para indicar un error porque -1 es un byte válido. Además, no podría devolver el valor por encima de 127 o por debajo de -128 porque Java solo maneja los bytes firmados.

Muchas veces cuando uno está leyendo un archivo, quiere los bytes sin firmar para su código de procesamiento. Para obtener valores entre 128 y 255, puede usar un breve, pero al usar un int alineará los registros de memoria con su bus de datos de manera más eficiente. Como resultado, realmente no pierde ninguna información usando un int, y probablemente gane un poco de rendimiento. El único inconveniente es el costo de la memoria, pero es probable que no se quede con esa int por mucho tiempo (ya que la procesará y la convertirá en un char o byte []).

+2

Devuelve un int porque cuando * EOF * ocurre, devuelve -1. Cuando se produce un error, arroja una excepción. – EJP

1

como dice el documento Java en InputStream#read, El byte de valor se devuelve como un int en el rango de 0 a 255. Es decir, el valor de bytes [-128 ~ 127] se ha cambiado a int value [0 ~ 255], por lo que el valor de retorno se puede usar para representar el final de la secuencia.

0

Al añadir a BalusC answer:

    no
  • un byte para permitir [0; 255] como capacidad principal y adicionalmente -1 como EOF resultan
  • int se utiliza para ajustar resultado a la palabra máquina (uno de los principales requisitos para las operaciones de E/S - velocidad, por lo que deben trabajar tan rápido como ¡posible!)

¡La excepción no se utiliza porque es perceptiblemente lenta!

Cuestiones relacionadas