(defparameter *stream*
(flex:make-in-memory-input-stream
#(72 101 108 108 111)))
(defparameter *circular-stream*
(make-circular-stream *stream*))
(read-char *circular-stream*) ;=> #\H
(read-char *circular-stream*) ;=> #\e
(read-char *circular-stream*) ;=> #\l
(read-char *circular-stream*) ;=> #\l
(read-char *circular-stream*) ;=> #\o
(read-char *circular-stream* nil :eof) ;=> :eof
(let ((buf (make-array 5 :adjustable t :fill-pointer 5)))
(read-sequence buf *circular-stream*)
(flex:octets-to-string buf))
;=> "Hello"
Circular-Streams allows you to read streams circularly by wrapping real streams. Once you reach end-of-file of a stream, it's file position will be reset to 0 and you're able to read it again.
Note this library can treat only octet streams which has a method read-byte
. This might be expanded in the future.
This library was originally written by Tomohiro Matsuyama as a part of Clack, Eitaro Fukamachi ported it with some improvements.
Class for circular input streams. make-circular-input-stream
is available to create an instance.
Creates circular-input-stream
and returns it.
- Tomohiro Matsuyama ([email protected])
- Eitaro Fukamachi ([email protected])
Copyright (c) 2011-2012 Tomohiro Matsuyama ([email protected])
Copyright (c) 2012-2016 Eitaro Fukamachi ([email protected])
Licensed under the LLGPL License.