public override BinaryCarsFile Deserialize(Stream serializationStream) { serializationStream.ThrowArgumentNullExceptionIfNull(); BinaryReader reader = new BinaryReader(serializationStream); BinaryCarsFile file = new BinaryCarsFile(); CarsCollection <BinaryCar> cars = new CarsCollection <BinaryCar>(); int headerRawSize = Marshal.SizeOf(typeof(short)); int recordsCountRawSize = Marshal.SizeOf(typeof(uint)); int carRawSize = Marshal.SizeOf(typeof(BinaryCar)); byte[] headerRawData = new byte[headerRawSize]; reader.Read(headerRawData, 0, headerRawSize); file.headerField = (short)RawDeserialize(typeof(short), ref headerRawData); byte[] recordsCountRawData = new byte[recordsCountRawSize]; reader.Read(recordsCountRawData, 0, recordsCountRawSize); file.RecordsCount = (uint)RawDeserialize(typeof(uint), ref recordsCountRawData); while (reader.PeekChar() > -1) { byte[] carRawData = new byte[carRawSize]; reader.Read(carRawData, 0, carRawSize); BinaryCar car = (BinaryCar)RawDeserialize(typeof(BinaryCar), ref carRawData); cars.Add(car); } file.Cars = cars; return(file); }
public Document Read(string pathDocument) { BinaryDocument _doc = new BinaryDocument(); using (BinaryReader reader = new BinaryReader(File.Open(pathDocument, FileMode.Open))) { _doc.Header = reader.ReadBytes(2); _doc.RecordsCount = reader.ReadBytes(4); int requests = BitConverter.ToInt32(_doc.RecordsCount, 0); if (requests != 0) { _doc.Cars = new List <BinaryCar>(); } BinaryCar _car; for (int i = 0; i < requests; i++) { _car = new BinaryCar(); _car.Date = reader.ReadBytes(8); _car.BrandNameLenght = reader.ReadBytes(2); int nameLenght = BitConverter.ToInt16(_car.BrandNameLenght, 0); _car.BrandName = reader.ReadBytes(nameLenght * 2); _car.Price = reader.ReadBytes(4); _doc.Cars.Add(_car); } } return(BinaryHelper.GetDocument(_doc)); }
public static List <BinaryCar> GetBinaryCars(List <Car> cars) { List <BinaryCar> _cars = new List <BinaryCar>(); foreach (var car in cars) { BinaryCar _car = new BinaryCar(); _car.Date = new byte[8]; string dateString = car.Date.ToString("ddMMyyyy"); char[] dateChar = dateString.ToCharArray(); for (int i = 0; i < dateString.Length; i++) { _car.Date[i] = Convert.ToByte(dateChar[i]); } _car.BrandNameLenght = BitConverter.GetBytes((Int16)car.BrandName.Length); _car.BrandName = Encoding.Unicode.GetBytes(car.BrandName); _car.Price = BitConverter.GetBytes((Int32)car.Price); _cars.Add(_car); } return(_cars); }