我试图创建一个Observable<ByteBuffer>
或Flowable<ByteBuffer>
来异步读取文件(或者至少我正在寻找Java可以提供给我的最佳性能用例 - 读取文件。)
我想逐个阅读(每次填写一个新的ByteBuffer
),因为我没有足够的RAM将其完全存储在内存中,并且需要背压处理(因为{{ 1}}必须逐个处理,所以我不希望IO溢出计算。)
我是Reactive Programming的初学者,所以我在RxJava。那么也许它已经存在一些完全符合我想要的库? (我已经搜索过了,但还没找到)
如果情况并非如此,有人可以告诉我如何做我想做的事吗?
答案 0 :(得分:1)
创建发布者并符合reactive-streams 规范并非易事https://github.com/reactive-streams/reactive-streams-jvm/blob/v1.0.3/README.md#specification
您可以尝试使用 https://github.com/cqfn/rio 库:
Publisher<ByteBuffer> pub = new File(Path.of("/tmp/file")).content();
如果想自己实现,可以查看reactive Channel
实现的源码:https://github.com/cqfn/rio/blob/master/src/main/java/org/cqfn/rio/channel/ReadableChannelPublisher.java
答案 1 :(得分:0)
您可以使用Vert.x作为可用选项之一。示例代码如下:
String str ="/tmp/test/";
List<String> elephantList = new ArrayList<String>(Arrays.asList(str.split("/")));
StringBuilder sb = new StringBuilder();
for (int i=elephantList.size()-1; i>-1; i--) {
String a = elephantList.get(i);
if (a.equals(""))
{
elephantList.remove(i);
}
else
{
sb.append(a);
sb.append('.');
}
}
sb.setLength(sb.length() - 1);
System.out.println("result" + elephantList + " " + sb.toString());
-
import io.vertx.core.file.OpenOptions;
import io.vertx.rxjava.core.Vertx;