我通过与buffer.getInt()读取下一个值,将缓冲区与PriorityQueue的Comparator一起使用(以比较流的元素)。不幸的是,当我下次进行比较时,我失去了这个价值。
因此,是否有可能将int返回到Java中的缓冲区?
我试过像putInt这样的东西,但这是不同的。
提前致谢。

我正在实施外部合并排序

package sort;
import java.util.Comparator;
import inputStream.Mapping.*;

public class extComparator implements Comparator<MapInp>{

    @Override
    public int compare(MapInp o1, MapInp o2) {
        Integer a = o1.readNext();
        Integer b = o2.readNext();
        return a.compareTo(b);
    }
}


然后,我在另一个文件中使用它:

heap = new PriorityQueue<MapInp>(numOfFilesNM/d, new extComparator());
heap.add(new MapInp("data/inp.data"));
....
int t = heap.peek().readNext(); //so, here I am comparing values and loosing the value


MapInt阅读下一篇:

public int readNext() {
    if(fileLen-pos-lastPos>bufSize) bufCap = bufSize;
    else bufCap = (int) (fileLen-pos-lastPos);
    if(buffer.position()==buffer.capacity()) {
        lastPos+=pos;
        buffer.clear();
    try {
        buffer = inpCh.map(FileChannel.MapMode.READ_ONLY, lastPos,bufCap);
    }
    catch (IOException e) {
    e.printStackTrace();
    }
    pos=0;
    }
    pos+=4;
    return buffer.getInt();
}


不幸的是,我仍然没有解决它。抱歉,但是共享整个代码可能会更好:https://www.dropbox.com/s/zqceyg8j6u9kvg7/test.zip?dl=0

最佳答案

您没有显示MapInp的定义,但是显然它有一个称为readNext的方法。该方法的名称表明它改进了某种迭代器。迭代器向前移动。

heap.peek()PriorityQueue<MapInp>返回顶部项目,而不会打扰队列。可能您需要调用MapInp.readNext()以外的其他方法来获取t的值。

顺便说一句,您的评论so, here I am comparing values and loosing the value似乎不正确,因为如果readNext根据评论起作用,我会感到惊讶。

10-05 18:37