请在2024 Clojure状态调查中分享您的想法!

欢迎!请在关于页面上查看更多关于如何使用本站的信息。

+1点赞
IO

我想使用一些库来进行文本文件和二进制文件的IO,不用使用诸如.write,.read的丑陋语法。
那么,关于网络套接字的库又是怎样的呢?

1 答案

+2点赞

编辑

对于文件、资源和其它流,请查看clojure.java.io命名空间。

注意,Java互操作性是Clojure的一种典范用法 - 它是一个有效的工具,而不是最后的手段,因此您不应该把它看作是丑陋的。以下是一个网络套接字的例子:

$ clj
Clojure 1.10.1
user=> (def socket (java.net.Socket. "127.0.0.1" 5555))
#'user/socket
user=> (require '[clojure.java.io :as io])
nil
user=> (def out (io/writer (.getOutputStream socket)))
#'user/out
user=> (def in (io/reader (.getInputStream socket)))
#'user/in
user=> (.write out "(+ 1 2 3)\n")
nil
user=> (.flush out)
nil
user=> (.readLine in)
"user=> 6"

您可以在另一个终端中,通过在端口5555上启动socket repl来测试它。

$ clj -J-Dclojure.server.repl='{:port 5555 :accept clojure.core.server/repl}'
...