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); } }
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; } } } } } }