Ei eu estou tentando abrir um arquivo e ler apenas de um deslocamento por um determinado período! Eu li este tópico: Como ler uma linha específica usando o número de linha específico de um arquivo em Java? lá dizia que não é possível ler uma certa linha sem ler as linhas antes, mas estou pensando em bytes!
FileReader location = new FileReader(file); BufferedReader inputFile = new BufferedReader(location); // Read from bytes 1000 to 2000 // Something like this inputFile.read(1000,2000);
É possível ler certos bytes de um offset conhecido?
RandomAccessFile expõe uma function:
seek(long pos) Sets the file-pointer offset, measured from the beginning of this file, at which the next read or write occurs.
FileInputStream.getChannel().position(123)
Esta é outra possibilidade além do RandomAccessFile
:
File f = File.createTempFile("aaa", null); byte[] out = new byte[]{0, 1, 2}; FileOutputStream o = new FileOutputStream(f); o.write(out); o.close(); FileInputStream i = new FileInputStream(f); i.getChannel().position(1); assert i.read() == out[1]; i.close(); f.delete();
Isso deve ser OK já que os documentos para FileInputStream#getChannel
dizem que:
Alterar a posição do canal, explicitamente ou por leitura, alterará a posição do arquivo desse stream.
Eu não sei como este método se compara ao RandomAccessFile
no entanto.