Bz2

# Module Bz2

    module Bz2: sig .. end

# Bzip2 interface

The module `Bz` provides a basic interface to the `bzip2` compression library.

## Datatypes & exceptions

    type in_channel

    type out_channel

    exception IO_error of string

Exception `IO_error` is raised when there is an error reading or writing on a compressed channel ; the string argument is the message reported by the OS.

    exception Data_error

Exception `Data_error` is raised when a data integrity error is detected during decompression.

    exception Unexpected_EOF

Exception `Unexpected_EOF` is raised when an `in_channel` finishes before the logical end of stream is detected.
When any of these exception is raised, the channel is automatically closed (but you still have to close the Pervasives channel).

    val version : string

Version of the underlying `bzip2` library.

## File I/O

### File input

    val open_in : ?small:bool -> ?unused:string -> Pervasives.in_channel -> in_channel

`open_in ic` opens a compressed stream reading from the `Pervasives` input channel `ic`.
`small` : when `true` requests usage of a different method for decompressing that is slower but uses less memory. Defaults: `false`

    val read : in_channel -> string -> int -> int -> int

`read buf pos len` reads up to `len` characters and store them in the string buffer `buf`, starting at position `pos`.
Raises `End_of_file` if end of stream was already reached.
Returns number of bytes actually read, (a value strictly less than `len` means end of stream).

    val read_get_unused : in_channel -> string

If there's some data after the compressed stream that you want to read from the same `Pervasives` `in_channel`, use `read_get_unused`.

    val close_in : in_channel -> unit

### File output

    val open_out : ?block:int -> Pervasives.out_channel -> out_channel

`open_out oc` creates an `out_channel` writing to the `Pervasives` output channel `oc`. Once the write operations are finished and the compressed channel is closed, it is possible to continue writing on the `Pervasives` channel. However, reading back requires special care (cf. above).
`block` : block size to use for compresion. It is a value between 1 and 9 inclusive. 9 is the default and provides best compression but takes most memory.

    val write : out_channel -> string -> int -> int -> unit

`write oc buf pos len` writes `len` characters, coming from `buf` and starting at position `pos`, to `oc`

    val close_out : out_channel -> unit

## In-memory compression

These functions compress to/decompress from string buffers.

    val compress : ?block:int -> string -> int -> int -> string

`compress buf pos len` compress a data chunk coming from `buf`, `len` character long, and starting at `pos`.
Returns compressed data chunk as string

    val uncompress : ?small:bool -> string -> int -> int -> string

`uncompress buf pos len` uncompress a data chunk comfing from `buf`, `len` character long, and starting at `pos`.
Returns uncompressed data chunk as string
`small` : see `Bz2.open_in` above