private void ReadBinary(Stream stream) { var reader = new BinaryReader(stream, Encoding.ASCII); var fileReader = new XFileBinaryReader(reader, this.UseDouble); this.ReadFile(fileReader); }
public static void ReadBinary(Stream stream, StringBuilder sb, bool useDouble) { var reader = new BinaryReader(stream, Encoding.ASCII); var fileReader = new XFileBinaryReader(reader, useDouble); bool newLine = true; bool afterSemicolon = false; while (true) { XToken token = fileReader.GetNextToken(); if (token == (XToken)(-1)) { break; } if (!Enum.IsDefined(typeof(XToken), token)) { throw new InvalidDataException(); } fileReader.ReadToken(); sb.Append(' '); sb.Append(token); switch (token) { case XToken.OpenedBrace: case XToken.ClosedBrace: { sb.AppendLine(); newLine = true; break; } case XToken.Name: { string name = fileReader.ReadName(); if (string.IsNullOrEmpty(name)) { name = fileReader.ReadNullTerminatedString(); } sb.Append(' '); sb.Append('"'); sb.Append(name); sb.Append('"'); break; } case XToken.String: { string str = fileReader.ReadString(); if (string.IsNullOrEmpty(str)) { str = fileReader.ReadNullTerminatedString(); } sb.Append(' '); sb.Append('"'); sb.Append(str); sb.Append('"'); break; } case XToken.Guid: { sb.Append(' '); sb.Append(fileReader.ReadGuid()); break; } case XToken.IntegerList: { int count = fileReader.ReadInteger(); sb.AppendFormat(CultureInfo.InvariantCulture, " {0}", count); sb.AppendLine(); const int w = 16; for (int i = 0; i < count; i++) { if ((i % w) == 0) { if (i != 0) { sb.AppendLine(); } sb.AppendFormat(CultureInfo.InvariantCulture, "{0}: ", i); } int value = fileReader.ReadInteger(); sb.AppendFormat(CultureInfo.InvariantCulture, " {0}", value); } sb.AppendLine(); sb.AppendFormat(CultureInfo.InvariantCulture, "{0}:", count); sb.AppendLine(); newLine = true; break; } case XToken.FloatList: { int count = fileReader.ReadInteger(); sb.AppendFormat(CultureInfo.InvariantCulture, " {0}", count); sb.AppendLine(); const int w = 16; for (int i = 0; i < count; i++) { if ((i % w) == 0) { if (i != 0) { sb.AppendLine(); } sb.AppendFormat(CultureInfo.InvariantCulture, "{0}: ", i); } float value = fileReader.ReadFloat(); sb.AppendFormat(CultureInfo.InvariantCulture, " {0:F6}", value); } sb.AppendLine(); sb.AppendFormat(CultureInfo.InvariantCulture, "{0}:", count); sb.AppendLine(); newLine = true; break; } case XToken.Semicolon: case XToken.Comma: afterSemicolon = true; break; } if (newLine) { switch (token) { case XToken.None: case XToken.OpenedBrace: case XToken.ClosedBrace: case XToken.IntegerList: case XToken.FloatList: break; default: newLine = false; break; } } if (afterSemicolon) { switch (token) { case XToken.Semicolon: case XToken.Comma: break; default: afterSemicolon = false; break; } } } sb.AppendLine(); }