我正在使用 BufferedReader 对对象执行流式读取。
我需要对这个对象做两件事:
- 将其传递给 SuperCSV csv 阅读器
- 获取原始行并将它们保存在(Clojure)惰性序列中
目前,我不得不使用两种不同的 BufferedReader:一种作为 SuperCSV CSV 阅读器类的参数,另一种用于初始化原始行的惰性序列。我有效地下载了 S3 对象两次,这很昂贵($)而且速度很慢。
我的一位同事指出,我正在寻找类似于 Unix“tee”命令的东西。一个 BufferedReader 可以以某种方式“拆分”,下载一大块数据,并将副本传递给惰性序列和 csv 阅读器功能将很有用。
我目前也在研究是否可以将惰性序列包装在 BufferedReader 中并将其传递给超级 csv。在将非常大的惰性序列传递给多个消费者时,我遇到了一些 Java 堆空间问题,所以我有点担心采用这种解决方案。
另一种解决方案是在本地下载文件,然后在该文件上打开两个流。这消除了流式传输背后的原始动机:允许在数据开始到达时立即开始处理文件。
最终的解决方案,也是我只有在没有其他方法的情况下才会考虑的解决方案,是实现我自己的 CSV 阅读器,它返回已解析的 CSV 和原始的未解析行。如果您使用了一个非常可靠的 CSV 阅读器,它可以返回已解析 CSV 数据的 Java Hash 和原始未解析行,请告诉我!
谢谢!