加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

使用Clojure / Java从s3读取流

发布时间:2020-12-15 04:47:07 所属栏目:Java 来源:网络整理
导读:我在s3上有一个大文件,我希望在下载时解码和解析.我碰巧使用了clojure Amazonica library,但任何图书馆都可以. 我可以轻松获得一个流: (def stream (- (get-object "some-s3-bucket" "some-object-key") :input-stream)); returns: #S3ObjectInputStream co
我在s3上有一个大文件,我希望在下载时解码和解析.我碰巧使用了clojure Amazonica library,但任何图书馆都可以.

我可以轻松获得一个流:

(def stream (-> (get-object "some-s3-bucket" "some-object-key") :input-stream))

; returns: #<S3ObjectInputStream com.amazonaws.services.s3.model.S3ObjectInputStream

但是如何阅读流?
我可以一次读一行(解压缩的内容是JSON行)吗?

(如果我的问题有任何歧义,我只关心流的读取,而不是gzip解码的任何部分)

解决方法

由于 S3ObjectInputStream恰好扩展了java.io.InputStream,您可以:

>使用Clojure’s reader函数获取BufferedReader.
>以Clojure允许的任何方式从阅读器读取数据.

>使用line-seq从BufferedReader获取延迟的行序列.如果这对你的JSON有意义.它可能不会.
>使用惰性JSON解析器,例如clj-lazy-json.这个特殊的解析器甚至可以处理裸流,因此可以安全地跳过步骤(1).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读