当长度为4时,以下循环执行5次。从流中读取5个字符。
(loop [i (.read stream) result "" counter length]
(let [c (char i)]
(println "=>" c)
(if (zero? counter)
result
(recur (.read stream) (str result c) (dec counter)))))
i
,接下来的四次读取通过recur
完成。当你测试counter
是否为zero?
时,你已经多读了一次。我发布的版本将读取操作移到了if语句内部,从而避免了这个问题。在循环之前不需要进行另一个测试。 - Brian Carper