Sru*_*lla 6 java io file memory-mapped-files mappedbytebuffer
我正在尝试解决 I/O 密集型的生产者消费者问题。生产者常量将数据附加到文件中,消费者从这个不断增长的文件中读取数据。文件大小通常以 GB 为单位(约 10GB)。
最初我尝试使用 BufferedOutputStream 和 BufferedInputStream 来读取数据并将数据写入文件。在上午 9:30 出现的数据突发期间,它占用了太多的系统 CPU %,例如 30-40%(必须是 I/O 的系统调用)。
查看内存映射文件可以加快速度。
    File fileToRead= new File("C:\\readThisFile.dat");
    FileChannel inChannel = new FileInputStream(fileToRead).getChannel();
    MappedByteBuffer buffer = inChannel.map(FileChannel.MapMode.READ_ONLY, 0, inChannel.size()); 
    byte[] data = new byte[(int)inChannel.size()];
    buffer.get(data);
1) 由于文件 readThisFile.dat size() 大于 INTEGER.MAX 长度,inChannel.map() 会引发异常。
2)消费者如何使用超大文件的内存映射文件不断读取数据。消费者每次可以加载100MB并继续寻找更多数据?
3)是否有更快的解决方案,例如尝试除Java中的内存映射文件之外的其他方法?