En la sección anterior, aprendimos cómo construir un flujo de entrada de bytes de archivo. En esta sección, continuamos aprendiendo cómo usar el flujo de entrada para leer bytes y cerrar el flujo.
El propósito del flujo de entrada es proporcionar un canal para leer datos de la fuente. El programa puede leer los datos de la fuente a través de este canal. El flujo de bytes del archivo puede llamar al método de lectura heredado de la clase principal para leer el archivo secuencialmente. , siempre que la secuencia no esté cerrada. Cada llamada al método de lectura lee secuencialmente el contenido restante del archivo hasta que se cierre el final del archivo o la secuencia de entrada de bytes del archivo.
El método de lectura del flujo de entrada de bytes lee los datos en la fuente en bytes.
El flujo de entrada llama a este método para leer un solo byte de datos de la fuente. Este método devuelve el valor del byte (un número entero entre 0 y 255). Si el byte no se lee, devuelve -1.
El flujo de entrada llama a este método para intentar leer b.length bytes del origen en la matriz de bytes bytes y devuelve el número real de bytes leídos. Si se llega al final del archivo, se devuelve -1.
El flujo de entrada llama a este método para intentar leer len bytes del origen en la matriz de bytes bytes y devuelve el número real de bytes leídos. Si se llega al final del archivo, se devuelve -1 y el parámetro off especifica una posición en la matriz de bytes para comenzar a almacenar los datos leídos.
Nota : La secuencia FileInputStream lee el archivo secuencialmente, siempre que la secuencia no esté cerrada, cada llamada al método de lectura lee el resto del contenido fuente secuencialmente hasta que se cierre el final de la fuente o la secuencia.
Todos los flujos de entrada proporcionan un método de cierre close() . Aunque todos los flujos abiertos se cerrarán automáticamente cuando finalice el programa, sigue siendo un buen hábito cerrar explícitamente cualquier flujo abierto después de que el programa haya terminado de usar el flujo. Si las secuencias abiertas no se cierran, es posible que no se permita que otro programa manipule los recursos utilizados por esas secuencias.
Por ejemplo:
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);}}}
Nota : al convertir los bytes leídos en una cadena, los bytes leídos reales deben convertirse en una cadena, como en el ejemplo anterior:
Cadenas=nuevaCadena(a,0,n);
no se puede escribir como:
Cadenas=nuevaCadena(a,0,100);