Каждое сообщение Protobuf имеет фабричный метод .parseDelimitedFrom(InputStream). Короче говоря, этот код должен иметь возможность собирать все сообщения типа ProtoMessage:
Код: Выделить всё
InputStream inputStream = new BufferedInputStream(new FileInputStream("my/file"));
List
result = new ArrayList();
ProtoMessage message;
while ((message = ProtoMessage.parseDelimitedFrom(inputStream)) != null) {
result.add(page);
}
Код: Выделить всё
@Inject
io.vertx.mutiny.core.Vertx vertx;
Multi
readProtoMessages() {
final Path path = Path.of("my/file");
Uni uni = vertx.fileSystem().open(path.toString(), new OpenOptions().setRead(true));
return uni.onItem().transformToMulti(AsyncFile::toMulti).flatMap(this::toProtoMessage);
}
@SneakyThrows
private Multi toProtoMessage(Buffer buffer) {
List result = new ArrayList();
InputStream inputStream = new BufferedInputStream(new ByteArrayInputStream(buffer.getBytes()));
ProtoMessage message;
while ((message = ProtoMessage.parseDelimitedFrom(inputStream)) != null) {
result.add(message);
}
return Multi.createFrom().items(result.stream());
}
Какой способ чтения файла будет предпочтительным " на элементной основе? Могу ли я передать результат непосредственно в Multi, вместо того, чтобы сначала собирать их все в список?
Подробнее здесь: https://stackoverflow.com/questions/790 ... ing-mutiny
Мобильная версия