je devais explorer ce format 7 bits également. Dans un de mes projets, je compile des données dans des fichiers en utilisant BinaryWriter de C#, puis je le décompresse à nouveau avec BinaryReader, ce qui fonctionne bien.
Plus tard, j'ai également dû implémenter un lecteur pour les fichiers compressés de ce projet pour Java. Java a une classe nommée DataInputStream (dans le paquet java.io), qui a des méthodes similaires. Malheureusement, l'interprétation des données de DataInputStream est très différente de celle de C#.
Pour résoudre mon problème, j'ai porté moi-même le BinaryReader de C# sur Java en écrivant une classe qui étend java.io.DataInputStream. Voici la méthode que j'ai écrit, ce qui fait exactement la même chose que C# 's BinaryReader.readString():
public String csReadString() throws IOException {
int stringLength = 0;
boolean stringLengthParsed = false;
int step = 0;
while(!stringLengthParsed) {
byte part = csReadByte();
stringLengthParsed = (((int)part >> 7) == 0);
int partCutter = part & 127;
part = (byte)partCutter;
int toAdd = (int)part << (step*7);
stringLength += toAdd;
step++;
}
char[] chars = new char[stringLength];
for(int i = 0; i < stringLength; i++) {
chars[i] = csReadChar();
}
return new String(chars);
}
Parfait. Exactement ce que je cherchais. – ains