标签:http io ar 使用 sp java for 文件 on
网上不少关于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。
标签:http io ar 使用 sp java for 文件 on
原文地址:http://my.oschina.net/jianglibo/blog/351362