Estoy tratando de averiguar qué estoy haciendo mal aquí. Estoy intentando utilizar un lector binario para facilitar la obtención de cuatro bytes iniciales de una secuencia en un valor Int32 que me dice cuánto tiempo se esperará el resto de los datos.C# BinaryReader.Read() obtiene basura para comenzar con
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 salida debe ser la entrada, pero me sale esto (Tenga en cuenta que los primeros cambios de carácter de la cadena es string)
(imagina que este es un muy, muy larga cadena
¿Puede alguien explicarme qué estoy haciendo mal? Lo ideal es que la segunda lectura continúe hasta que el total de bytes de lectura sea igual al valor de los primeros cuatro bytes ... este código es solo una simplificación para mostrar el problema que me estoy encontrando. La posición de la secuencia parece corr ect (4) pero parece que comienza a leer en 2.
MSDN, quiere leerlo. – jason
Hehe, gracias ... y lo estaba. Desafortunadamente para mí, el BinaryReader no menciona que Writer almacena datos adicionales para una cadena que la cadena;) – James
'BinaryWriter.Write (cadena)': "Una cadena con el prefijo de longitud' representa la longitud de la 'cadena' prefijando a' string' un solo byte o palabra que contiene la longitud de esa 'cadena'. Este método primero escribe la longitud de la' cadena' como un entero sin signo codificado en UTF-7, y luego escribe esa cantidad de caracteres en la secuencia mediante el ' La codificación actual de la instancia de BinaryWriter' ". – jason