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

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

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

public Flux<String> getLines(Flux<FilePart> filePartFlux) {
    return filePartFlux.flatMap(filePart ->
            filePart.content().map(dataBuffer -> {
                byte[] bytes = new byte[dataBuffer.readableByteCount()];
                dataBuffer.read(bytes);
                DataBufferUtils.release(dataBuffer);
                return new String(bytes, StandardCharsets.UTF_8);
            })
            .map(this::processAndGetLinesAsList)
            .flatMapIterable(Function.identity());
}

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

<name,title,address
joe,engineer,straight way california,
mike,doc >

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

<tor,hatlway street,
jeremy,plumber,newyork>

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

暂无答案!

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

相关问题