Utilizzando FileInputStream di Java
-
22-07-2019 - |
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)
?
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.