java—如何逐行读取SpringWebFlux文件部分数据缓冲区

l2osamch  于 2021-07-06  发布在  Java
关注(0)|答案(0)|浏览(269)

我正在使用springwebflux上传文件。在我的情况下,我必须上传一个csv文件。通过我所做的搜索,我可以收集到以下代码:

  1. public Flux<String> getLines(Flux<FilePart> filePartFlux) {
  2. return filePartFlux.flatMap(filePart ->
  3. filePart.content().map(dataBuffer -> {
  4. byte[] bytes = new byte[dataBuffer.readableByteCount()];
  5. dataBuffer.read(bytes);
  6. DataBufferUtils.release(dataBuffer);
  7. return new String(bytes, StandardCharsets.UTF_8);
  8. })
  9. .map(this::processAndGetLinesAsList)
  10. .flatMapIterable(Function.identity());
  11. }

但在此过程中,如果databuffer达到其容量,它将部分读取最后一行,因此如果我传递半个值,将处理不正确的csv。有没有什么方法可以让我确定文件是逐行读取的而不是通量。
示例:从通量发射的数据缓冲器1包含:

  1. <name,title,address
  2. joe,engineer,straight way california,
  3. mike,doc >

来自flux的数据缓冲器2包含:

  1. <tor,hatlway street,
  2. jeremy,plumber,newyork>

我目前想到的解决方案是维护一个堆栈,通过比较csv拆分的头长度和拆分的当前记录长度来推送不完整的记录,如果较少,则从堆栈中弹出emelemt并连接两个字符串。我希望有一个有效的方法来做这一切。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题