Pregunta

En java.io.FileInputStream , hay un método int read (Byte [] buffer, int offset, int numBytes) ; ¿Cómo podemos usar esta función? ¿Hay alguna diferencia entre este método y read (byte [] buffer) ?

¿Fue útil?

Solución

Como señala el Javadoc (y lo indican los nombres de los parámetros), el método con desplazamiento y numBytes usa solo una parte del búfer para colocar su salida.

public int read(byte[] b,
            int off,
            int len)
     throws IOException

Parameters:
    b - the buffer into which the data is read.
    off - the start offset of the data.
    len - the maximum number of bytes read. 

Puede usar este método si desea reutilizar un búfer existente que ya tiene datos que no desea bloquear (por supuesto, el numBytes a partir de offset se sobrescribirá).

En Java, casi todas las operaciones en buffers ofrecen este tipo de interfaz. Si se usa correctamente, puede evitar copiar / almacenar datos en búfer más veces de lo necesario.

Otros consejos

Acabo de recibir esto del javadoc.

Lee hasta len bytes de datos de esta secuencia de entrada en una matriz de bytes. Si len no es cero, el método bloquea hasta que haya alguna entrada disponible; de lo contrario, no se leen bytes y se devuelve 0.

Parámetros:

  • b - el búfer en el que se leen los datos.
  • off: el desplazamiento inicial en la matriz de destino b
  • len: el número máximo de bytes leídos.

Devoluciones: el número total de bytes leídos en el búfer, o -1 si no hay más datos porque se ha alcanzado el final del archivo.

http: / /java.sun.com/javase/6/docs/api/java/io/FileInputStream.html#read (byte [] , int, int)

Esta función es muy útil para leer un archivo completo en la memoria. Vea este ejemplo,

File = new File("/anywhere/anyfile");
InputStream is = new FileInputStream(file);
long fileSize = file.length();
byte[] bytes = new byte[(int)fileSize];
int offset = 0;
int count=0; 
while (offset < fileSize) {
    count=is.read(bytes, offset, fileSize-offset));
    if (count >= 0)
        offset += count;
    else
        throw new IOException("Can't read file "+file.getName());
}
is.close();
// Now bytes has all the complete file. 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top