Почему 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 как значение байта. Здесь есть разница!