чтение буферизованного бинарного файла (с поиском)

Скажем, мне нужно прочитать огромный двоичный файл целых чисел, удобный способ:

FileInputStream fi = new FileInputStream(file);
BufferedInputStream bi = new BufferedInputStream( fi); 
DataInputStream di =new DataInputStream(bi);

Но теперь скажем, мне нужно прочитать огромный блок, начиная с n-го целого числа. До сих пор я реализовал своего рода буфер самостоятельно:

RandomAccessFile fp=new RandomAccessFile(file);
fp.seek(position);
byte[] buff= new  byte[len];
fp.read(buff, 0, len);
ByteArrayInputStream bIn = new ByteArrayInputStream(buff);
DataInputStream dIn= new DataInputStream(bIn);

теперь я могу разобрать данные в buff, обработать их и прочитать следующий блок.

Мне было интересно, есть ли какой-нибудь стандартный буферный объект, который я мог бы использовать. Я хотел бы упростить свой код и не заботиться о буферизации самостоятельно.

Любая подсказка приветствуется. Якопо


person jac    schedule 07.12.2010    source источник


Ответы (2)


Посмотрите на НИО. Например, java.nio.MappedByteBuffer.

person user207421    schedule 07.12.2010

Просто начните с fi.skip(position), прежде чем обернуть его bi и di. Базовый поток фактически вызывает поиск, когда позиция достаточно велика.

person dspyz    schedule 07.12.2010
comment
о, это так просто и так эффективно! - person jac; 07.12.2010