Serialization 我如何从Racket中的文件读取一组数据?

Serialization 我如何从Racket中的文件读取一组数据?,serialization,deserialization,racket,Serialization,Deserialization,Racket,似乎如果我将一个集合写入一个文件,它的格式就不能作为一个集合轻松地读回。下面是一个例子: #lang racket (let ([out (open-output-file "test.rkt" #:exists 'replace)]) (write (set 1 2 3 4 5) out) (close-output-port out)) Welcome to Racket v6.4.0.7. -> (require racket/serialize) -> (with

似乎如果我将一个集合写入一个文件,它的格式就不能作为一个集合轻松地读回。下面是一个例子:

#lang racket

(let ([out (open-output-file "test.rkt" #:exists 'replace)])
  (write (set 1 2 3 4 5) out)
  (close-output-port out))
Welcome to Racket v6.4.0.7.
-> (require racket/serialize)
-> (with-output-to-file "/tmp/set.rktd"
     (lambda () (write (serialize (set 1 2 3)))))
-> (with-input-from-file "/tmp/set.rktd"
     (lambda () (deserialize (read))))
(set 1 3 2)
这会生成一个带有
#
的文件,读者对此表示不满。邮件列表上有一个相关的未回答问题

我现在处理这个问题的方法是逐字打印字符串
“(将“
设置为一个文件,然后是所有带空格的整数,然后是一个结束的
”)
。超级难看,如果可能的话,我想用阅读器。

你可以用球拍来做这件事。下面是一个例子:

#lang racket

(let ([out (open-output-file "test.rkt" #:exists 'replace)])
  (write (set 1 2 3 4 5) out)
  (close-output-port out))
Welcome to Racket v6.4.0.7.
-> (require racket/serialize)
-> (with-output-to-file "/tmp/set.rktd"
     (lambda () (write (serialize (set 1 2 3)))))
-> (with-input-from-file "/tmp/set.rktd"
     (lambda () (deserialize (read))))
(set 1 3 2)
请注意,序列化值只是一种特殊的s表达式,因此您可以像处理其他值一样对其进行操作(如将其存储在数据库中、写入磁盘、通过网络发送等):