2017-02-09 131 views
1

我正在尝试创建Observable<ByteBuffer>Flowable<ByteBuffer>,它将异步读取文件(或者至少我在寻找Java在该用例中可以提供的最佳性能 - 读取文件)。因为我没有足够的RAM将其全部存储在内存中,并且想要背压处理(因为ByteBuffer必须由一个处理器来处理)一个,所以我不希望IO溢出计算)。与RxJava异步读取文件2

我是Reactive Programming的初学者,所以我在RxJava。所以也许它已经存在一些图书馆,正是我想要的吗? (我已经找过它,但还没有找到)

如果情况并非如此,有人可以告诉我怎么做我想要的吗?

+1

你可能要考虑使用内存映射文件(S),您映射整个文件作为字节缓冲区和OS会照顾分页进入和退出未使用的部分,即使文件本身不适合内存。 – akarnokd

回答

0

您可以使用Vert.x作为其中一个可用选项。示例代码提供如下:

import io.vertx.core.file.OpenOptions; 
import io.vertx.rxjava.core.Vertx; 

-

public static void main(String[] args) { 
    Vertx vertx = Vertx.vertx(); 
    vertx.fileSystem() 
      .openObservable("PATH-TO-FILE", new OpenOptions()) 
      .flatMap(asyncFile -> asyncFile.toObservable()) 
      .subscribe(buffer -> System.out.println(buffer.length() + "\n\n"), 
         e-> e.printStackTrace(), 
         () -> vertx.close()); 

} 
+0

不涉及获取额外依赖性的答案会很有帮助。 –