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

欢迎!请查阅 关于 页面以获取更多关于如何使用本站的信息。

0
IO

你好,我正在尝试使用 "/dev/input/js0"(一个 PS4 手柄)从连接到我的电脑的设备读取和输出数据。我希望像 cat /dev/input/js0 那样实时显示数据。

这是我所使用的代码,但它似乎只在我点击按钮多次后才打印出来。

(with-open [r (clojure.java.io/input-stream "/dev/input/js0")]
  (loop [c (.read r)]
    (print c)
    (recur (.read r))))

当我使用 cat /dev/input/js0 命令时,当我点击手柄上的按钮时可以立即看到输出,这正是我希望实现的。

有人知道我如何实时获取数据?我犯了什么错误?

2 个答案

0
 
最佳答案

我发现问题所在。这是因为使用 print 不会自动刷新输出。一旦我切换到使用会刷新输出的 println,我就能够像数据来到一样将其打印出来。

0

默认情况下,clojure.java.io/input-stream 返回一个 java.io.BufferedInputStream,这可能是导致你看到输入延迟的原因。

感谢您的回复。起初我认为也是如此,但最终发现问题是出在 `print` 上,因为它没有刷新输出。
...