Domanda

In java.io.FileInputStream , esiste un metodo int read (Byte [] buffer, int offset, int numBytes) ; come possiamo usare questa funzione - c'è qualche differenza tra questo metodo e read (byte [] buffer) ?

È stato utile?

Soluzione

Come sottolinea Javadoc (e indicano i nomi dei parametri), il metodo con offset e numBytes utilizza solo una parte del buffer per inserire il suo output.

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. 

È possibile utilizzare questo metodo se si desidera riutilizzare un buffer esistente che contiene già dati che non si desidera bloccare (ovviamente, numBytes a partire da offset verrà sovrascritto).

In Java, quasi tutte le operazioni sui buffer offrono questo tipo di interfaccia. Se usato correttamente, puoi evitare di copiare / buffering i dati più volte del necessario.

Altri suggerimenti

Ho appena ricevuto questo dal javadoc.

Legge fino a len byte di dati da questo flusso di input in una matrice di byte. Se len non è zero, il metodo si blocca fino a quando non è disponibile un input; in caso contrario, non vengono letti byte e viene restituito 0.

Parametri:

  • b: il buffer in cui vengono letti i dati.
  • off - l'offset iniziale nell'array di destinazione b
  • len - il numero massimo di byte letti.

Returns: il numero totale di byte letti nel buffer o -1 se non ci sono più dati perché è stata raggiunta la fine del file.

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

Questa funzione è molto utile per leggere un intero file in memoria. Vedi questo esempio,

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. 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top