BufReader
is a buffered I/O wrapper that works with any stream type
implementing the stream-read and stream-write interfaces.
Interfaces
Implement these for your stream type to use BufReader:
(definterface stream-read (Fn [&a &(Array Byte) Int] Int))
(definterface stream-write (Fn [&a &(Array Byte)] Int))
(definterface stream-close (Fn [a] ()))
Usage
; Wrap a TcpStream (if socket library implements the interfaces)
(let [br (BufReader.wrap stream)]
(do
(match (BufReader.read-line &br)
(Result.Success line) (println* &line)
(Result.Error e) (IO.errorln &e))
(BufReader.delete br)))
flush
(Fn [(Ref BufReader a)] (Result () String))
(flush br)
sends all buffered write data. Returns (Result () String).
read-append
(Fn [(Ref BufReader a), (Ref (Array Byte) b)] (Result Int String))
(read-append br buf)
reads available data and appends to the byte buffer.
Returns (Result Int String) with the number of bytes read.
read-line
(Fn [(Ref BufReader a)] (Result String String))
(read-line br)
reads until a newline character, returning the line including
the delimiter. Returns (Result String String).
read-n
(Fn [(Ref BufReader a), Int] (Result (Array Byte) String))
(read-n br n)
reads exactly n bytes. Returns (Result (Array Byte) String).
May return fewer bytes on EOF.
read-until
(Fn [(Ref BufReader a), Char] (Result String String))
(read-until br delim)
reads until the given delimiter byte. Returns (Result String String).
write
(Fn [(Ref BufReader a), (Ref String b)] Int)
(write br data)
buffers string data for writing. Call flush to send.
write-bytes
(Fn [(Ref BufReader a), (Ref (Array Byte) b)] Int)
(write-bytes br data)
buffers binary data for writing. Call flush to send.