提问者:小点点

将光标转换为流以适应反应性网络流量


我有一个在Spring boot reactive中开发的Web应用程序。我必须解压缩文件并将文件信息保存在数据库中。所有执行都是完全反应性的(通量/单声道)。

现在我有一个代码要解压缩,使用Java工具

  public void Flux<AppFile> saveFiles(){
       ZipInputStream zis = new ZipInputStream(new FileInputStream( BASE_URL + filename ));
     
       while( zis.getNextEntry() != null ){
         reactiveRepository.save( new AppFile( "name", "description", zipEntry.getFileName()); 

      }
....
  return Flux.just(..); // not a clean way to return a flux.
  }

如您所见,while循环是标准方式,但实体保存是反应式的。

如何将此迭代器转换为流,以便我可以在响应式中处理所有内容。


共1个答案

匿名用户

看看这有没有帮助

return Flux.<ZipEntry>generate(sink -> {
                ZipInputStream zis = new ZipInputStream(inputStream);
                ZipEntry zipEntry;
                try {
                    if ((zipEntry = zis.getNextEntry()) == null)
                        sink.complete();
                    else
                        sink.next(zipEntry);

                } catch (IOException ex) {
                    sink.error(new RuntimeException(ex));
                }
            }).map( e -> new AppFile("name", "description", e.getName()))
            .doOnNext(reactiveRepository::save);