2017-02-09 43 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

不涉及獲取額外依賴性的答案會很有幫助。 –