2010-12-07 9 views
1

sagen, dass ich große Binärdatei von ganzen Zahlen lesen muß, eine praktische Möglichkeit ist:Lese Binärdatei gepuffert (mit suchen)

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

Aber jetzt sagen, ich habe einen großen Block von dem n-ten zu lesen beginnen ganze Zahl. Bisher habe ich eine Art Puffer von mir als implementiert:

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); 

jetzt ich die Daten in buff analysieren kann, es Prozess und dann den nächsten Block lesen.

Ich fragte mich, ob es ein Standard-Puffer-Objekt gab, das ich hätte verwenden können. Ich möchte meinen Code vereinfachen und mich nicht um die Pufferung kümmern.

Jeder Hinweis ist willkommen. Jacopo

Antwort

2

Werfen Sie einen Blick auf NIO. Zum Beispiel java.nio.MappedByteBuffer.

2

Beginnen Sie einfach mit fi.skip (Position), bevor Sie es mit bi und di umhüllen. Der zugrundeliegende Strom macht tatsächlich einen Anruf, um zu suchen, wenn die Position ausreichend groß ist.

+0

oh, das ist so einfach und so effektiv! – jac

Verwandte Themen