TLDR:如何使用Spring WebClient逐行处理GET响应(React式)?
详情:
- 远程服务器返回大小高达20 Gb的响应
- 我的服务单独解析行(每一行都被编码为UTF8),并对结果进行流处理(跳过99%的行)
- 我不想将整个响应加载到内存中,例如,我想逐行解析服务器更新。
不幸的是,我没有找到任何将Flux<ByteBuffer>
转换为Flux<String>
的解决方案(通过在行尾拆分)。
**问题:**是否有嵌入式转换器/解码器可实现此功能?
可能的解决方案:
- 创建临时缓冲区(最初为空)
- 对于每个输入缓冲器:
- 在新缓冲区之前添加临时缓冲区,重新创建临时缓冲区。
- 尝试从此缓冲区读取单行(例如,读取到行尾):
- 如果有字节剩余-返回此字符串并重复行阅读
- 如果缓冲区已完成(例如,没有行分隔符):只需将这些字节复制到临时缓冲区。
- 最后一次缓冲后:读取临时缓冲区直到结束。
另外:您不能只将输入缓冲区转换为字符串,因为一些utf8字符可以从缓冲区N开始,并在缓冲区N+1继续。
2条答案
按热度按时间flmtquvp1#
下面的代码可以工作,但是这是完全同步的代码(可能只有预取功能)。它使用Apache Http Components。
kmbjn2e32#
我还没有找到一个嵌入式的,我正在使用类似下面代码的东西。我假设你正在使用单字符
\n
行结束,并且\n
在这个类看到的任何编码中总是被编码为单字节字符,例如UTF16将不被支持。