当前位置: 首页 > 面试题库 >

用Java读取二进制文件

益智明
2023-03-14
问题内容

我有一个较长的无符号整数文件(每个64位,0.47GB文件),需要读取并存储在数组中。经过一番思考之后,由于Java中的所有内容都已签名(请纠正我,请纠正我),因此我长时间使用了该类型,我想不出更好的选择了。无论如何,仅需对数组进行排序,因此原始数字的精确值并不是最重要的。我们应该测量排序算法的效率,仅此而已。但是,当我实际要读取文件时(在下面的代码中),我遇到了砖墙。

public class ReadFileTest {
    public static void main(String[] args) throws Exception {
        String address = "some/directory";
        File input_file = new File (address);
        FileInputStream file_in = new FileInputStream(input_file);
        DataInputStream data_in = new DataInputStream (file_in );

        long [] array_of_ints = new long [1000000];
        int index = 0;

        long start = System.currentTimeMillis();

        while(true) {
            try {
                long a = data_in.readLong();
                index++;
                System.out.println(a);
            }
            catch(EOFException eof) {
                System.out.println ("End of File");
                break;
            }
        }

        System.out.println(index);
        System.out.println(System.currentTimeMillis() - start);
    }
}

它会一直持续下去,我通常会在阅读节目时出去吃午饭。总而言之,这是我迄今为止最快的20分钟。今天有队友吹嘘说他的程序在4秒钟内就读完了。他使用C
工作,我知道C

比Java更快,但这太荒谬了。有人可以告诉我我在做什么错。我不能将其归咎于语言或机器,所以一定是我。但是,从我所看到的,Java教程使用完全相同的类,即DataInputStream。我还看到了几次推荐FileChannels。他们是唯一的出路吗?


问题答案:

您应该使用缓冲输入,例如:

new DataInputStream(
    new BufferedInputStream(
        new FileInputStream(new File(input_file))))


 类似资料:
  • 问题内容: 我发现用Python读取二进制文件特别困难。你能帮我个忙吗?我需要读取此文件,在Fortran 90中,该文件很容易被读取 详细而言,文件格式为: 如何使用Python阅读?我尝试了一切,但没有成功。我是否有可能在python中使用f90程序,读取此二进制文件,然后保存需要使用的数据? 问题答案: 读取二进制文件内容,如下所示: 然后使用struct.unpack “解压缩”二进制数据

  • 问题内容: 我在C#.net中有一个程序,它使用写入1个整数和3个字符串到文件中。 现在,我正在用Java编程(对于Android,这是Java的新手),我必须访问以前使用C#写入文件的数据。 我尝试使用和,但无法获得正确的结果。我通常会得到: java.io.UTFDataFormatException:字节21附近的输入格式错误 或者和我得到的是错误的… 这样做的正确方法是什么? 问题答案:

  • 问题内容: 我正在尝试从URLConnection读取二进制文件。当我使用文本文件对其进行测试时,它似乎可以正常工作,但对于二进制文件则不能。发送文件时,我在服务器上使用以下mime类型: 但是到目前为止,似乎没有任何效果。这是我用来接收文件的代码: 问题答案: 我就是这样

  • 问题内容: 我正在尝试使用Python 3读取包含图像(视频)的12位二进制文​​件。 要读取类似的文件但以16位编码,以下代码可以很好地工作: 其中filename_video是文件,可以从另一个文件读取视频的nb_frames,高度和宽度特征。“工作得很好”是指快速:在计算机上读取具有140帧的640x256视频大约需要1毫秒。 据我所知,当文件以12位编码时,由于没有uint12类型,因此无

  • 所以。。。我需要从.pkl文件中读取并导入图像数据集。图像存储为“二进制blob”。一旦完成了,我需要将它们转换成字节格式,这样我就可以通过Google的CloudVision运行它们。我设法在Linux虚拟机上打开了该文件(花了几天时间试图让它在Windows上工作…)。但现在我似乎无法将这个“二进制斑点”转换为我可以使用的实际图像。。。 下面是一个“二进制blob”: \1\x0 0 0 0\

  • 问题内容: 我必须使用Java读取旧格式的二进制文件。 简而言之,该文件的标头由几个整数,字节和固定长度的char数组组成,后跟同样由整数和char组成的记录列表。 我可以用任何其他语言创建s(C / C ++)或s(Pascal / Delphi),它们是标题和记录的逐字节表示。然后,我将字节读入标头变量,并对记录执行相同的操作。 像这样:(Delphi) 用Java做类似的事情的最佳方法是什么