我正在尝试解决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中尝试除内存映射文件以外的其他内容?