BelhardTraining.LessonIO.Program.BinaryAdaptersDemo C# (CSharp) Method

BinaryAdaptersDemo() private static method

private static BinaryAdaptersDemo ( ) : void
return void
        private static void BinaryAdaptersDemo()
        {
            // Генерируем случайные данные
            Random rnd = new Random(Environment.TickCount);
            double[] results = new double[5];
            for (int i=0; i<results.Length; i++)
            {
                results[i] = rnd.NextDouble();
                Console.WriteLine("{0:F10}", results[i]);
            }

            // Будем работать с файлом в папке для временных файлов
            string tempFileName = Path.Combine(Path.GetTempPath(), "binary-adapter.bin");

            // Запись данных
            using (FileStream writeStream = File.OpenWrite(tempFileName))
            using (BinaryWriter binWriter = new BinaryWriter(writeStream))
            {
                //  Просим BinaryWriter записать в поток байтовое представление значения типа int
                binWriter.Write(results.Length);
                for (int i = 0; i < results.Length; i++)
                {
                    //  Просим BinaryWriter записать в поток байтовое представление значения типа double
                    binWriter.Write(results[i]);
                }

                // Блок using автоматически закрывает адаптер и поток когда исполнение
                //  дойдет до закрывающей фигурной скобки. Поэтому нет необходимости
                //  писать строки
                //      binWriter.Close();
                //      writeStream.Close();
            }
            Console.WriteLine();

            long expectedLength = sizeof(int) + sizeof(double) * results.Length;
            long realLength = (new FileInfo(tempFileName)).Length;
            if (expectedLength == realLength)
            {
                Console.WriteLine(
                    "Ожидаемая длина файла - {0} {1} - совпадает с реальной длиной файла",
                    expectedLength, expectedLength.PrettyBytes()
                );
            }
            else
            {
                Console.WriteLine(
                    "Ожидаемая длина файла - {0} {1} - не совпадает с реальной длиной файла - {2} {3}"
                    , expectedLength, expectedLength.PrettyBytes()
                    , realLength, realLength.PrettyBytes()
                );
            }
            Console.WriteLine();

            // Чтение
            using (FileStream readStream = File.OpenRead(tempFileName))
            using (BinaryReader binReader = new BinaryReader(readStream))
            {
                //  Просим BinaryReader прочитать из потока байтовое представление
                //      значения типа int, преобразовать его в int и вернуть нам
                int length = binReader.ReadInt32();
                double[] resultsCopy = new double[length];
                for (int i = 0; i < length; i++)
                {
                    //  Просим BinaryReader прочитать из потока байтовое представление
                    //      значения типа double, преобразовать его в double и вернуть нам
                    resultsCopy[i] = binReader.ReadDouble();

                    Console.WriteLine("{0:F10} - {1}", resultsCopy[i], resultsCopy[i] == results[i] ? "Правильное значение" : "Ошибка!");
                }

                // Блок using автоматически закрывает адаптер и поток когда исполнение
                //  дойдет до закрывающей фигурной скобки. Поэтому нет необходимости
                //  писать строки
                //      binReader.Close();
                //      readStream.Close();
            }

            // Удаляем за собой временный файл
            File.Delete(tempFileName);
        }