Java: InputStream too slow to read huge files

前端 未结 4 1100
失恋的感觉
失恋的感觉 2020-12-15 23:57

I have to read a 53 MB file character by character. When I do it in C++ using ifstream, it is completed in milliseconds but using Java InputStream it takes several minutes.

4条回答
  •  醉话见心
    2020-12-16 00:14

    I would try this

    // create the file so we have something to read.
    final String fileName = "1.2.fasta";
    FileOutputStream fos = new FileOutputStream(fileName);
    fos.write(new byte[54 * 1024 * 1024]);
    fos.close();
    
    // read the file in one hit.
    long start = System.nanoTime();
    FileChannel fc = new FileInputStream(fileName).getChannel();
    ByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size());
    while (bb.remaining() > 0)
        bb.getLong();
    long time = System.nanoTime() - start;
    System.out.printf("Took %.3f seconds to read %.1f MB%n", time / 1e9, fc.size() / 1e6);
    fc.close();
    ((DirectBuffer) bb).cleaner().clean();
    

    prints

    Took 0.016 seconds to read 56.6 MB
    

提交回复
热议问题