簡體   English   中英

非阻塞文件讀取

[英]Non-Blocking File Reads

java中是否有非阻塞文件讀取API? 如果不是,用 C++ 構建一個並通過 JNI 從 Java 應用程序調用它是明智的嗎?

我原來的答案現在是錯誤的,因為在 Java 7 中添加了AsynchronousFileChannel

您仍然無法選擇文件,但現在有兩種異步文件讀取方法:一種采用回調另一種返回Future

使用回調方法(並從回調中調度事件)可能比使用專用線程輪詢管道更干凈。

不, FileChannel不擴展SelectableChannel

可能是因為並非所有操作系統都支持它。

Windows 可以,理論上你可以編寫一個特定於 Windows 的 C++ 庫並通過 JNI 調用它,但是將它與java.nio集成需要做很多工作。

我寧願讓工作線程將文件內容復制到管道,並在管道的另一端進行非阻塞讀取。

AsynchronousFileChannel是正確的答案。 然而,它沒有提供簡單的 API。 與提供簡單靜態方法的java.nio.file.Files的類似用法相比,使用它是相當冗長的,例如: readAllLineslines 不幸的是Files方法是同步的。

所述AsyncFiles從替代RxIo提供了相應的非阻塞方法,用3層不同的API:基於回調, CompletableFuture並且還與反應性流 這是一個帶有反應流的示例:

AsyncFiles
    .lines(path)
    .subscribe(doOnNext(line -> /*... use line from background thread ...*/));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM