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)

Foi útil?

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. 
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top