![[LISPWORKS]](../Graphics/LWSmall.gif)
![[Common Lisp HyperSpec (TM)]](../Graphics/CLHS_Sm.gif) 
 ![[Previous]](../Graphics/Prev.gif)
![[Up]](../Graphics/Up.gif)
![[Next]](../Graphics/Next.gif)
A stream, whether a character stream or a binary stream, can be an input stream (source of data), an output stream (sink for data), both, or (e.g., when ``:direction :probe'' is given to open) neither.
The next figure shows operators relating to input streams.
  Figure 21-2.  Operators relating to Input Streams.
clear-input  read-byte            read-from-string            
listen       read-char            read-line                   
peek-char    read-char-no-hang    read-preserving-whitespace  
read         read-delimited-list  unread-char                 
The next figure shows operators relating to output streams.
  Figure 21-3.  Operators relating to Output Streams.
clear-output   prin1            write            
finish-output  prin1-to-string  write-byte       
force-output   princ            write-char       
format         princ-to-string  write-line       
fresh-line     print            write-string     
pprint         terpri           write-to-string  
A stream that is both an input stream and an output stream is called a bidirectional stream. See the functions input-stream-p and output-stream-p.
Any of the operators listed in Figure 21-2 or Figure 21-3 an be used with bidirectional streams. In addition, the next figure hows a list of operators that relate specificaly to bidirectional streams.
y-or-n-p yes-or-no-p
Figure 21-4. Operators relating to Bidirectional Streams.
![[Starting Points]](../Graphics/StartPts.gif)
![[Contents]](../Graphics/Contents.gif)
![[Index]](../Graphics/Index.gif)
![[Symbols]](../Graphics/Symbols.gif)
![[Glossary]](../Graphics/Glossary.gif)
![[Issues]](../Graphics/Issues.gif)