Use BinaryReader and the ReadInt32 method to read the data from a binary file as integers.
BinaryReader handles binary files. A binary file may have thousands of integers stored in it, or another simple data type. BinaryReader is mainly for convenience. It makes using binary data easier.BinaryWriterFile
File. If you do not have a binary file you are trying to open already, you can create one using the BinaryWriter type. Please visit the BinaryWriter tutorial for instructions about creating a binary file.
Note: Visual Studio can open binary files and you can look at the data. It won't be readable, but it gives you an idea what is happening.
Here: The file here is 48 bytes, because 12 integers of 4 bytes each are in it.
Example. Here we open the same binary file and then read in the bytes. BinaryReader here provides some useful properties that make this easier. When you run the next program, you will see all the ints recovered.
FileStream: We see that BinaryReader receives a FileStream. This is returned by File.Open.
ReadInt16, ReadInt32, ReadInt64: 2, 4 or 8 bytes are read. I had problems with ReadInt16. I think ReadInt32 is commonly useful.
ReadString: Microsoft says the string is "prefixed with the length, encoded as an integer seven bits at a time."
Sizeof. In the example, I used sizeof(int). This evaluates to the integer value 4 and always will, but it might be preferable for clarity. If you can't remember how many bytes are in an integer, you may have bigger problems.Sizeof
Performance. Most programs read in much more data than they write. I found BinaryReader substantially faster than using plain text. Looking into PeekChar indicates that it performs a separate read each time it is called.
Tip: This can easily multiply the time required for the BinaryReader. PeekChar should thus be avoided.
Fragment that uses PeekChar: C#
using (BinaryReader b = new BinaryReader(File.Open("file.bin", FileMode.Open)))
// Do not do this.
while (b.PeekChar() != -1)
int v = b.ReadInt32();
Encoding. 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. Please find someone else for an explanation.
Example that uses Encoding.ASCII: C#//
// 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)))
Summary. The BinaryReader 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.