clojure.java.io包能够解决哪些io问题?

本文介绍了Clojure的IO库——clojure.java.io的功能与使用方法,包括如何将字符串或URL内容写入文件,并展示了该库支持的各种输入输出对象类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网上不少关于clojure的io的例子都喜欢用java代码来表达,难道是clojure本身提供的io不够灵活吗?很有可能是举例的作者没有仔细阅读clojure.java.io的文档。clojure.java.io应该涵盖了95%以上的使用场景,让我们一起来理一理。

可能的场景:

1、你已经有了一个String,想写入到文件中。

(io/copy you-string (io/file "/tmp/xx.xx") :encode "utf-8")

2、你有了一个url,想把内容写入文件中

(io/copy (io/input-stream "http://www.baidu.com") (io/file "c:/tmp.txt"))

如果你注意一下包中的IOFactory,它支持以下对象:

array-of-bytes, array-of-characters, java.io.BufferedInputStream, java.io.BufferedOutputStream, java.io.BufferedReader, java.io.BufferedWriter, java.io.File, java.io.InputStream, java.io.OutputStream, java.io.Reader, java.io.Writer, java.lang.String, java.net.Socket, java.net.URI, java.net.URL, Object

IOFactory通过multimethod,根据不同的参数类型,猜测出最合适的处理方式。一般情况下,你只要按你的理解书写即可,除非结果和你想象的不符,这时才需要仔细分析一下。

比如对于io/reader,

Default implementations are provided for Reader, BufferedReader,

InputStream, File, URI, URL, Socket, byte arrays, character arrays,

and String.

也就是说你可以通过以下方式获取reader。

(io/reader (as-file "c:/xx.xx"))
(io/reader (as-url "http://somulr"))(io/reader "astring")
(io/reader (.getBytes "astring"))
(io/reader [\a \b \c])

总体来说,clojure.java.io已经充分考虑了各种场景,你完全可以用clojure方式来完成io。

转载于:https://my.oschina.net/jianglibo/blog/351362

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值