Прочитайте файл protobuf-сообщений, используя MutinyJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Прочитайте файл protobuf-сообщений, используя Mutiny

Сообщение Anonymous »

Используя Mutiny, я хочу прочитать сообщения Protobuf из файла. Я хочу собрать эти сообщения в io.smallrye.mutiny.Multi. Сам файл может быть довольно большим.
Каждое сообщение 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);
}
Но мне не удалось воплотить эти знания в асинхронную, неблокирующую оболочку Mutiny.

Код: Выделить всё

@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());
}
Хотя у меня есть модульный тест, показывающий, что я получаю ожидаемые ProtoMessages из тестового файла с использованием приведенного выше кода, я считаю, что это решение не «правильное». Кажется, что .open() записывает весь файл в Buffer, поэтому он блокируется?
Какой способ чтения файла будет предпочтительным " на элементной основе? Могу ли я передать результат непосредственно в Multi, вместо того, чтобы сначала собирать их все в список?

Подробнее здесь: https://stackoverflow.com/questions/790 ... ing-mutiny
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»