В предыдущем разделе мы узнали, как создать входной поток байтов файла. В этом разделе мы продолжим изучать, как использовать входной поток для чтения байтов и закрытия потока.
Целью входного потока является предоставление канала для чтения данных из источника через этот канал. Поток байтов файла может вызывать метод чтения, унаследованный от родительского класса, для последовательного чтения файла. , пока поток не закрыт. Каждый вызов метода чтения последовательно считывает оставшееся содержимое файла до тех пор, пока не будет закрыт конец файла или входной поток байтов файла.
Метод чтения входного потока байтов считывает данные в источнике в байтах.
Входной поток вызывает этот метод для чтения одного байта данных из источника. Этот метод возвращает значение байта (целое число от 0 до 255). Если байт не прочитан, он возвращает -1.
Входной поток вызывает этот метод, чтобы попытаться прочитать байты b.length из источника в массив байтов b, и возвращает фактическое количество прочитанных байтов. Если достигнут конец файла, возвращается -1.
Входной поток вызывает этот метод, чтобы попытаться прочитать len байтов из источника в массив байтов b, и возвращает фактическое количество прочитанных байтов. Если достигнут конец файла, возвращается -1, а параметр off указывает позицию в массиве байтов, с которой начинается сохранение прочитанных данных.
Примечание . Поток FileInputStream считывает файл последовательно, пока поток не закрыт, каждый вызов метода чтения последовательно считывает остальную часть исходного содержимого до тех пор, пока не будет закрыт конец источника или поток.
Все входные потоки имеют закрывающий метод close() . Хотя все открытые потоки будут автоматически закрыты после завершения программы, хорошей привычкой по-прежнему является явное закрытие любых открытых потоков после того, как программа завершила их использование. Если открытые потоки не закрыты, другой программе может быть запрещено манипулировать ресурсами, используемыми этими потоками.
Например:
importjava.io.*;publicclassMain{publicstaticvoidmain(Stringargs[]){intn=-1;byte[]a=newbyte[100];try{Filef=newFile(Main.java);InputStreamin=newFileInputStream(f); while( (n=in.read(a,0,100))!=-1){Strings=newString(a,0,n);System.out.print(s);}in.close();}catch(IOExceptione) {System.out.println(FilereadError+e);}}}
Примечание . При преобразовании прочитанных байтов в строку фактически прочитанные байты должны быть преобразованы в строку, как в приведенном выше примере:
Strings = newString(a,0,n);
нельзя записать как:
Strings = newString(a,0,100);