make-concatenated-stream
make-concatenated-stream Function
Syntax:
make-concatenated-stream &rest input-streams → concatenated-stream
Arguments and Values:
input-stream—an input stream.
concatenated-stream—a concatenated stream.
Description:
Returns a concatenated stream that has the indicated input-streams initially associated with it.
Examples:
(read (make-concatenated-stream
(make-string-input-stream "1")
(make-string-input-stream "2"))) → 12
Exceptional Situations:
Should signal type-error if any argument is not an input stream.
See Also:
concatenated-stream-streams
Expanded Reference: make-concatenated-stream
Basic Usage
make-concatenated-stream creates an input stream that reads from multiple input streams in sequence. When one stream reaches end of file, reading continues from the next.
(let ((s (make-concatenated-stream
(make-string-input-stream "Hello ")
(make-string-input-stream "World"))))
(loop for c = (read-char s nil nil)
while c
collect c into chars
finally (return (coerce chars 'string))))
=> "Hello World"
Reading Lisp Objects Across Boundaries
The concatenated stream seamlessly joins data from its component streams.
(read (make-concatenated-stream
(make-string-input-stream "1")
(make-string-input-stream "2")))
=> 12
Multiple Streams
(let ((s (make-concatenated-stream
(make-string-input-stream "aaa")
(make-string-input-stream "bbb")
(make-string-input-stream "ccc"))))
(loop for c = (read-char s nil nil)
while c
collect c into chars
finally (return (coerce chars 'string))))
=> "aaabbbccc"
Empty Concatenation
A concatenated stream with no component streams is immediately at end of file.
(read-char (make-concatenated-stream) nil :eof)
=> :EOF