BinaryReader
This C# class
handles binary files. A binary file may have thousands of integers stored in it, or another simple data type. Many files can be treated as binary.
If you do not have a binary file you are trying to open already, you can create one using the BinaryWriter
type. BinaryReader
makes using binary data easier.
Here we open the same binary file and then read in the bytes. BinaryReader
here provides some useful properties. When you run the next program, you will see all the ints recovered.
BinaryReader
receives a FileStream
. This is returned by File.Open
.ReadInt32
. This method consumes 4 bytes in the binary file and turns it into an int
.sizeof
int
. This evaluates to the integer value 4 and always will, but it might be preferable for clarity.using System; using System.IO; class Program { static void Main() { R(); } static void R() { // 1. using (BinaryReader b = new BinaryReader( File.Open("file.bin", FileMode.Open))) { // 2. // Position and length variables. int pos = 0; // 2A. // Use BaseStream. int length = (int)b.BaseStream.Length; while (pos < length) { // 3. // Read integer. int v = b.ReadInt32(); Console.WriteLine(v); // 4. // Advance our position variable. pos += sizeof(int); } } } }1 4 6 7 11 55 777 23 266 44 82 93
Most programs read in much more data than they write. I found BinaryReader
substantially faster than using plain text.
PeekChar
indicates that it performs a separate read each time it is called.BinaryReader
. PeekChar
should thus be avoided.using (BinaryReader b = new BinaryReader(File.Open("file.bin", FileMode.Open))) { // Do not do this. while (b.PeekChar() != -1) { int v = b.ReadInt32(); } }
Sometimes you can fix an encoding problem by specifying Encoding.ASCII
to File.Open
. I do not understand why this works but it solved one of my problems.
// // If all else fails, specify Encoding.ASCII to your File.Open call. // using (BinaryReader b = new BinaryReader( File.Open("file.bin", FileMode.Open, Encoding.ASCII))) { // ... }
This C# class
is effective for reading binary files. Binary files have great advantages for performance, but they tend not to be standard and can be difficult to work with.