module Netstream:sig..end
Picture:
 0                pos_in        pos_in + window_length            EOF
 +------------------+-------------------+--------------------------+
                    ====================
                     The current window
 
 You can use a netstream like an in_obj_channel, and read characters
 and strings from the stream. The bytes come first from the look-ahead
 buffer, and if there are not enough bytes, they are loaded from the
 underlying channel. After every read operation it is tried to enlarge
 the window such that it contains at least one block.
 If you want that the window becomes larger, you can call want (to
 enlarge the window to a certain size) or want_another_block (to load
 just another block from the underlying channel). Note that this affects only
 the current window and not the future size of the window.
 Note Buffer_underrun: netstreams can cope with underruns of underlying
 channels. An underrun happens when it is not possible to ensure the
 minimum window size. However, it is possible that the window size
 sinks under the minimum, but the Buffer_underrun is deferred until the
 next call of an input method. Furthermore, there is a problem in the skip
 method which may only be partially executed, i.e. the method skips some
 bytes and then raises Buffer_underrun.
class type in_obj_stream =object..end
in_obj_stream extends in_obj_channel by look-ahead methods
class input_stream :?len:int -> ?block_size:int -> Netchannels.in_obj_channel ->in_obj_stream
in_obj_stream on top of an in_obj_channel.
class sub_stream :?len:int -> ?delimiter:string -> in_obj_stream ->in_obj_stream
len and
 delimiter.
val print_in_obj_stream : Format.formatter -> in_obj_stream -> unit