C'est une méthode connue.
Un octet est composé de 8 bits. L'idée est de dédié 7 bits à la valeur que tu veux écrire et d'utiliser le dernier pour indiquer si l'octet suivant dans le flux fait partie de la valeur.
Pour une valeur sur 16 bits, mettons que je veuille envoyer 0x5634 :
L'équivalent en binaire de 0x5634 est 0101 0110 0011 0100 (ici on s'en fout un peu de l'endianness mais il faut y penser)
Pour écrire 0x5634 sur le stream, je le décompose en paquets de 7 bits :
0101011 0001101 0000000 (le dernier paquet est rempli de 0 si les 7 bits de son pas atteints)
Il manque un bit à chaque paquet pour faire un octet complet. Pour savoir quelle valeur mettre dans ce dernier bit (le plus haut), on regarde si le paquet courant est le dernier paquet du lot de paquets de 7 bits.
On obtient alors :
1010 1011 1000 1101 0000 0000
Ce qui nous donne 0xAB8B00
On remarque alors que la valeur n'est plus encodée sur 2 octets, mais sur 3.
Enfin... je crois...