Question

Je suis en train de comprendre ce que je fais mal ici. Je tente d'utiliser un lecteur binaire pour faciliter obtenir un quatre premiers octets d'un flux en une valeur Int32 qui me dit combien de temps le reste des données est à prévoir.

static void Main(string[] args)
{
    MemoryStream stream = new MemoryStream();

    BinaryWriter writer = new BinaryWriter(stream);

    string s = "Imagine this is a very very long string.";

    writer.Write(s.Length);
    writer.Write(s);
    writer.Flush();

    BinaryReader reader = new BinaryReader(stream);
    reader.BaseStream.Seek(0, SeekOrigin.Begin);

    char[] aChars = new char[reader.ReadInt32()];
    reader.Read(aChars, 0, aChars.Length);
    Console.WriteLine(new string(aChars));
}

La sortie devrait être l'entrée, mais je reçois ce (Notez que les premiers changements de caractères chaîne à chaîne)

  

(Imaginez ceci est une chaîne très longue

Quelqu'un peut-il me expliquer ce que je fais mal? Idéalement, la deuxième lecture continuera jusqu'à ce que le nombre total d'octets de lecture était égale à la valeur des quatre premiers octets .. ce code est juste une simplification pour montrer le problème que je courais dans. La position du flux semble correct (4), mais il semble presque comme il commence à lire à 2.

Était-ce utile?

La solution

BinaryWriter.Write (String) écrit une chaîne de longueur préfixée à ce flux. Cela signifie qu'il écrit d'abord la longueur de la chaîne au flux, puis la chaîne en utilisant un codage. La longueur est codé sept bits à la fois, non pas comme nombre entier de 32 bits.

Si vous voulez lire du flux, vous devez utiliser

scroll top