# Class BitOutputStream

java.lang.Object
fr.iutfbleau.sae.mpif.BitOutputStream

public class BitOutputStream extends Object
Décorateur de flux permettant l'écriture binaire à granularité du bit.

Cette classe encapsule un `OutputStream` existant et permet l'écriture de bits individuellement ou par groupes. Les bits sont accumulés afin de former des octets avant écriture.

Utilisée notamment pour l'encodage des fichiers compressés (ex : format PIF utilisant des codes de Huffman).

Since:
  2025-12-13

## Constructor Summary

Constructors
Constructor
Description
`BitOutputStream(OutputStream fluxSortie)`
Construit un écrivain binaire à partir d'un flux existant.

## Method Summary

Modifier and Type
Method
Description
`void`
`fermerFlux()`
Vide les buffers internes et ferme le flux de sortie.
`void`
`flush()`
Force l'écriture immédiate des données accumulées dans le flux sous-jacent.
`void`
`writeBit(int bit)`
Écrit un bit dans le flux binaire.
`void`
`writeBits(int valeur, int nombreBits)`
Écrit une séquence de bits correspondant à une valeur entière.
`void`
`writeBitString(String codeBinaire)`
Écrit une séquence de bits à partir d'une chaîne de '0' et '1'.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Constructor Details

### BitOutputStream

public BitOutputStream(OutputStream fluxSortie)
Construit un écrivain binaire à partir d'un flux existant.

Parameters:
  `fluxSortie` - flux de sortie à décorer
Throws:
  `IllegalArgumentException` - si le flux est nul

## Method Details

### writeBit

public void writeBit(int bit) throws IOException
Écrit un bit dans le flux binaire.

Parameters:
  `bit` - bit à écrire (0 ou 1)
Throws:
  `IOException` - si une erreur d'écriture survient
  `IllegalArgumentException` - si le bit n'est ni 0 ni 1

### writeBits

public void writeBits(int valeur, int nombreBits) throws IOException
Écrit une séquence de bits correspondant à une valeur entière.

Parameters:
  `valeur` - valeur contenant les bits à écrire
  `nombreBits` - nombre de bits à écrire (strictement positif)
Throws:
  `IOException` - si une erreur d'écriture survient

### flush

public void flush() throws IOException
Force l'écriture immédiate des données accumulées dans le flux sous-jacent.

Throws:
  `IOException` - si une erreur survient lors du flush

### writeBitString

public void writeBitString(String codeBinaire) throws IOException
Écrit une séquence de bits à partir d'une chaîne de '0' et '1'.

Parameters:
  `codeBinaire` - chaîne contenant uniquement '0' et '1'
Throws:
  `IOException` - si une erreur d'écriture survient
  `IllegalArgumentException` - si la chaîne contient autre chose que '0' ou '1'

### fermerFlux

public void fermerFlux() throws IOException
Vide les buffers internes et ferme le flux de sortie.

Throws:
  `IOException` - si une erreur survient lors de la fermeture