Java 缓冲区内的二进制搜索

Java 缓冲区内的二进制搜索,java,file,search,binary,buffer,Java,File,Search,Binary,Buffer,因此,我实施了一个工作程序,使用二进制搜索方法搜索文件: public int BSearch(int x1, int x2) throws IOException { int current_key; middle=(x1+x2)/2; if(x1>x2) { middle=-1; //middle==-1 is condition of 'key not found' return middle; } MyFi

因此,我实施了一个工作程序,使用二进制搜索方法搜索文件:

public int BSearch(int x1, int x2) throws IOException {
    int current_key;

    middle=(x1+x2)/2;
    if(x1>x2) {
        middle=-1;  //middle==-1 is condition of 'key not found'
        return middle;
    }
    MyFile.seek(middle*4);
    current_key=MyFile.readInt();
    da++;
    if(current_key==key) {
        return middle;
    }
    else if(key<current_key) {
        x2=middle-1;
        return BSearch(x1,x2);
    }
    else {
        x1=middle+1;
        return BSearch(x1,x2);
    }
}

一个大问题(除其他外)是我不知道如何从缓冲区的某个位置读取数据。好的,我想我是通过将缓冲区逐元素复制到一个新的int[]数组元素来实现的。我想相信每次加载缓冲区时,它仍然比访问光盘快。

为什么不能使用整个文件呢?我的想法是使用小缓冲区,这样我就可以以同样的方式处理大文件(如5 GB)。当然,我无法将5GB的数据读入主内存。我认为不需要将整个文件加载到RAM中。您只需使用
seek
并读取相关字节即可。
seek
函数接受一个
long
,它最多可以寻址8个EB,这就足够了。我想你说的和我到目前为止所做的是一样的,或者我就是不能理解你:P。我想这样做的原因是跳过访问光盘,更多地使用更快的内存。我只是不知道如何搜索缓冲区。
Arrays.binarySearch(…)
?此外,从算法上讲,一次搜索整个文件的速度更快,因为当块很小时,O(logn)变成O(n)。
 byte[] buf = new byte[1024];
 MyFile.read(buf);
 ByteArrayInputStream bis= new ByteArrayInputStream(buf1);
 DataInputStream ois= new DataInputStream(bis);
 current_key=ois.readInt();