二进制文件的Java列表迭代器-问题

时间:2020-02-12 18:24:43

标签: java debugging iterator

是否有可能在给定用户指定位置的情况下遍历二进制文件?我一直在想办法做到这一点,但是我没有找到任何线索。这是我正在处理的代码:

System.out.println("Enter name of file: ");
    String filename = in.nextLine();
    File file = new File(filename);
    if (file.exists()) {
        System.out.println(file.getAbsoluteFile());
        RandomAccessFile raf = new RandomAccessFile(file, "r");
        System.out.println("Size: " + file.length() + " bytes.");
        System.out.println("Attempting to record file to AList");
        AList<Byte> fileList = new AList<>(); 
        raf.seek(0);
        for (int i = 0; i < raf.length(); i++) {
            fileList.add(raf.readByte());
        }
        System.out.print("Enter byte positon to navigate to: ");
        long pos = in.nextLong();
        in.nextLine();
        ListIterator<Byte> itr = fileList.listIterator(0);
        if (pos >= 0 && pos < file.length()){
        int i = 0;
        while(i < 5 && itr.hasNext() == true){
            raf.seek(pos);
            byte b = raf.readByte();
            System.out.print(((b >= 0 && b <= 15)?"0":"") + Integer.toHexString((int)b & 0x00FF) + " ");
            i++;
        }

我什至不能完全确定我写的内容在逻辑上是否正确。我想做的是让用户在二进制文件中指定一个位置,然后检查是否在文件范围内。然后,它应该能够使用迭代器从该位置输出下一个5个字节。我对迭代器不是很确定。

1 个答案:

答案 0 :(得分:0)

您可以将读取文件的循环修改为:a)忽略直到请求的起始位置的字节,b)读取并打印接下来读取的5个字节,然后c)退出。