Почему read () в FileInputStream возвращает целое число? [дубликат]

этот вопрос уже есть ответ здесь:

этой страница показывает, что это так, что метод может вернуть -1, когда он хочет указать, что больше нет байтов для чтения.

но байт колеблется от -128 до 127, верно? И не было бы больше смысла для возвращаемого типа read() быть байтом, так как он возвращает байт?

Спасибо за ваше время.

5 ответов


причина, по которой он возвращает значение как int заключается в том, что он должен возвращать значение между 0-255, а также указывать, когда больше нет байтов для чтения из файла. Используя int, вы можете вернуть полный диапазон положительных значений без знака 0-255, а также указывают, когда файл будет завершена. Он не сможет предоставить это только с 256 различными значениями byte значение, половина из которых отрицательны по умолчанию Java.


конечно, но JavaDocs продолжай говорить..

возвращает:
общее количество прочитанных байтов в буфер или -1, если больше нет данных, потому что достигнут конец файла.

надеюсь, что более 127 байт можно прочитать из потока за раз.


байт данных-это значение без знака с диапазоном от 0 до 255, а byte в java определяется в диапазоне от -128 to 127, который не имеет смысла при чтении двоичных данных. read() возвращает целое число, позволяющее использовать все неотрицательные значения для представления допустимых данных, и отрицательное значение для сигнала конца данных.

в общем случае функция должна указывать условие ошибки или исключение с помощью разные механизм от одну он использует для возврата данных. В простейшем случае он может возвращать значение, которое не может использоваться для представления допустимых данных, чтобы обеспечить однозначность его значения.


Q: не было бы больше смысла для возвращаемого типа read () быть байт?

A: нет, потому что" byte " не может вернуть весь диапазон 0..255 (без знака), а" короткий " - это просто Пита.


класс FileInputStream позволяет считывать содержимое файла в виде потока байтов. Вот простой пример:

InputStream input = new FileInputStream("c:\data\input-text.txt");

int data = input.read();
while(data != -1) {
  //do something with data...
  doSomethingWithData(data);

  data = input.read();
}
input.close();

Примечание: правильная обработка исключений была пропущена здесь для ясности. Чтобы узнать больше о правильной обработке исключений, перейдите к обработке исключений JAVA IO.

метод read () FileInputStream возвращает int, который содержит байтовое значение байта read. Если метод read() возвращает -1, данных больше нет читать в потоке, и его можно закрыть. То есть -1 как значение int, а не -1 как значение байта. Здесь есть разница!