Skip to main content

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