2017-02-09 2 views
1

Observable<ByteBuffer>またはFlowable<ByteBuffer>を作成しようとしていますが、これはファイルを非同期で読み込みます(少なくとも、Javaがそのユースケースで私に与える可能性のある最高のパフォーマンスを探しています。ファイル)。ファイルをRxJavaと非同期で読む2

私は完全にメモリに保存するのに十分なRAMがなく、バックプレッシャー処理を望んでいるので(毎回新しいByteBufferを記入してください)、部分的に読みたいです(ByteBufferは1つで、私はIOがコンピューティングをオーバーフローさせたくない)。

私はリアクティブプログラミングの初心者であり、RxJavaもそうです。だから、おそらく私は欲しいものを正確に実行するライブラリがすでに存在していますか? (私はすでに検索しましたが、まだ見つかりませんでした)

これが当てはまらない場合、誰かが私にしたいものをする方法を教えてもらえますか?

+1

あなたはページングの世話をする、あなたがたByteBufferとOSとファイル全体をマップメモリ​​マップされたファイル(複数可)を使用して検討する必要がありますファイル自体がメモリに収まらない場合でも、未使用の部分を出し入れすることができます。 – akarnokd

答えて

0

利用可能なオプションの1つとして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

追加の依存関係を必要としない回答が役に立ちます。 –

関連する問題