示例#1
0
        private static void RoundTrip(int[] values, long expectedLength)
        {
            string fileName = "IntBlock.bin";

            using (IntBlockWriter writer = new IntBlockWriter(new BufferedWriter(File.Create(fileName))))
            {
                for (int i = 0; i < values.Length; ++i)
                {
                    writer.Write(values[i]);
                }
            }

            Assert.AreEqual(expectedLength, new FileInfo(fileName).Length);

            using (IntBlockReader reader = new IntBlockReader(new BufferedReader(File.OpenRead(fileName))))
            {
                int[] readValues;
                int   index = 0;
                int   count = 0;

                do
                {
                    count = reader.Next(out readValues);
                    for (int i = 0; i < count; ++i)
                    {
                        Assert.AreEqual(values[index++], readValues[i]);
                    }
                } while (count == IntBlock.BlockSize);

                Assert.AreEqual(values.Length, index);
            }
        }
示例#2
0
        public static void ReadIntBlock(string filePath, int bufferSizeBytes)
        {
            int[]  block;
            byte[] buffer     = new byte[bufferSizeBytes];
            long   totalSize  = 0;
            long   totalCount = 0;

            using (new ConsoleWatch($"ReadIntBlock(\"{filePath}\", {bufferSizeBytes})", () => $"Done; {totalSize:n0} bytes"))
            {
                using (BufferedReader bufferedReader = new BufferedReader(File.OpenRead(filePath), buffer))
                    using (IntBlockReader reader = new IntBlockReader(bufferedReader))
                    {
                        while (true)
                        {
                            int count = reader.Next(out block);
                            for (int i = 0; i < count; ++i)
                            {
                                totalSize += block[i];
                            }

                            if (count == 0)
                            {
                                break;
                            }
                        }
                    }
            }

            //for (int j = 0; j < 4; ++j)
            {
                totalSize  = 0;
                totalCount = 0;
                using (BufferedReader bufferedReader = BufferedReader.ReadAll(filePath))
                    using (new ConsoleWatch($"ReadIntBlock(\"{filePath}\", {bufferSizeBytes})", () => $"[ReadAll]; {totalSize:n0} bytes; {totalCount:n0} ints"))
                    {
                        using (IntBlockReader reader = new IntBlockReader(bufferedReader))
                        {
                            while (true)
                            {
                                int count = reader.Next(out block);
                                for (int i = 0; i < count; ++i)
                                {
                                    totalSize += block[i];
                                }

                                totalCount += count;
                                if (count == 0)
                                {
                                    break;
                                }
                            }
                        }
                    }

                totalSize = 0;
                using (BufferedReader bufferedReader = BufferedReader.ReadAll(filePath))
                    using (new ConsoleWatch($"ReadIntBlock(\"{filePath}\", {bufferSizeBytes})", () => $"[ReadAll, ForEach]; {totalSize:n0} bytes"))
                    {
                        using (IntBlockReader reader = new IntBlockReader(bufferedReader))
                        {
                            foreach (Memory <int> page in reader)
                            {
                                foreach (int value in page.Span)
                                {
                                    totalSize += value;
                                }
                            }
                        }
                    }
            }
        }