Чтение функции Clojure из потоковых блокировок - PullRequest
1 голос
/ 30 июня 2009

У меня есть функция, которая читает один токен из входного потока, который вызывается (индикатор потока get-next-Indicator) и возвращает его. Я пытаюсь использовать его для построения карты.

Но когда я запускаю его, он блокируется. Если я уберу одну из функций get-next-Indicator, она сработает. Пытается ли обе функции одновременно прочитать поток, вот так. Что вызывает это?


(defn decode-map [ stream ]
  (loop [result {}]
    (let [c (char (.read stream))]
      (if (= c \e)
        result
        (recur (assoc result (get-next-indicator stream (int c))
                             (get-next-indicator stream (int c)) ))))))

1 Ответ

1 голос
/ 01 июля 2009

Просто предположение, но блокирует ли индикатор get-next-index, если в потоке нечего получить? Вы вызываете его дважды подряд перед повторением (а затем выполняете .read после этого, чтобы определить конец). Если во время одного из вызовов индикатора get-next-stream у потока заканчиваются байты, то функция зависает, ожидая достаточного количества байтов в потоке для завершения этих вызовов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...