Usando FileInputStream de Java
-
22-07-2019 - |
Pergunta
Em java.io.FileInputStream
, há uma int read(Byte[] buffer,int offset,int numBytes)
método; como podemos usar esta função -? não há qualquer diferença entre este método e read(byte[] buffer)
Solução
Como os pontos de Javadoc fora (e os nomes dos parâmetros indicam), o método com offset e numBytes utiliza apenas parte do buffer para colocar sua produção em.
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.
Você pode usar este método se você quiser reutilizar um tampão existente que já tem dados em que você não quer clobber (Claro, o numBytes
a partir offset
terá substituído).
Em Java, quase todas as operações em buffers oferecer este tipo de interface. Usado corretamente, você pode evitar a cópia / buffer de dados mais vezes do que o necessário.
Outras dicas
Só tenho isso desde o javadoc.
Lê-se a len bytes de dados deste fluxo de entrada em uma matriz de bytes. Se len não é zero, os blocos de método até que alguma entrada é acessível; caso contrário, há bytes são lidos e 0 é retornado.
Parâmetros:
- b -. O tampão no qual os dados são lidos
- off - o início compensado na matriz de destino b
- len -. O número máximo de bytes ler
Retorna: o número total de bytes lidos no buffer, ou -1, se não houver mais dados porque o fim do ficheiro tenha sido atingido.
http: / /java.sun.com/javase/6/docs/api/java/io/FileInputStream.html#read (byte [] , int int)
Esta função é muito útil para ler um arquivo inteiro na memória. Veja este exemplo,
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.