2012-03-10 73 views
2

我正在java中製作一個小程序,並且我希望它從二進制文件中的設置位置讀取。就像文件流中的子字符串一樣。任何好的方法來做到這一點?從二進制文件(java)中設置位置讀取

byte[] buffer = new byte[1024]; 
FileInputStream in = new FileInputStream("test.bin");  
while (bytesRead != -1) {  
    int bytesRead = inn.read(buffer, 0 , buffer.length); 
} 
in.close(); 
+0

RandomAccessFile的可能是你想要的東西:HTTP: //docs.oracle.com/javase/6/docs/api/java/io/RandomAccessFile.html – 2012-03-10 16:46:02

+0

[在Java/Android中讀取文件的一部分]的可能的重複(http://stackoverflow.com/questions/ 3581243 /閱讀java中的一段文件的安卓) – 2012-03-10 16:49:46

+0

感謝那就是我一直在尋找:) – user952725 2012-03-13 19:22:02

回答

1

我會用RandomAcessFile針對以上。

如果要加載大量數據我會使用內存映射,因爲這會出現要快很多(有時是)順便說一句,您可以使用的FileInputStream內存映射爲好。要做到這一點

FileChannel in = new FileInputStream("test.bin").getChannel(); 
MappedByteBuffer mbb = in.map(FileChannel.MapMode, 0, (int) in.size()); 
// access mbb anywhere 
long l = mbb.getLong(40000000); // long at byte 40,000,000 
// 
in.close(); 
3

的一種方法是使用一個java.io.RandomAccessFile和它的java.nio.FileChannel從/到該文件中讀取和/或寫入數據,例如

File file; // initialize somewhere 
ByteBuffer buffer; // initialize somewhere 
RandomAccessFile raf = new RandomAccessFile(file, "r"); 
FileChannel fc = raf.getChannel(); 
fc.position(pos); // position to the byte you want to start reading 
fc.read(buffer); // read data into buffer 
byte[] data = buffer.array();