14.2 二进制流 (Binary Streams)

第 7 章曾提及的流有二进制流 (binary streams)以及字符流 (character streams)。一个二进制流是一个整数的来源及/或终点,而不是字符。你通过指定一个整数的子类型来创建一个二进制流 ── 当你打开流时,通常是用 unsigned-byte ── 来作为 :element-type 的参数。

关于二进制流的 I/O 函数仅有两个, read-byte 以及 write-byte 。所以下面是如何定义复制一个文件的函数:

  1. (defun copy-file (from to)
  2. (with-open-file (in from :direction :input
  3. :element-type 'unsigned-byte)
  4. (with-open-file (out to :direction :output
  5. :element-type 'unsigned-byte)
  6. (do ((i (read-byte in nil -1)
  7. (read-byte in nil -1)))
  8. ((minusp i))
  9. (declare (fixnum i))
  10. (write-byte i out)))))

仅通过指定 unsigned-byte:element-type ,你让操作系统选择一个字节 (byte)的长度。举例来说,如果你明确地想要读写 7 比特的整数,你可以使用:

  1. (unsigned-byte 7)

来传给 :element-type