读取和写入二进制文件(Reading from and Writing into Binary files)
BinaryReader和BinaryWriter类用于读取和写入二进制文件。
BinaryReader类
BinaryReader类用于从文件中读取二进制数据。 通过将FileStream对象传递给其构造函数来创建BinaryReader对象。
下表描述了BinaryReader类的常用methods 。
Sr.No. | 方法和描述 |
---|---|
1 | public override void Close() 它关闭BinaryReader对象和底层流。 |
2 | public virtual int Read() 从基础流中读取字符并提升流的当前位置。 |
3 | public virtual bool ReadBoolean() 从当前流中读取布尔值,并将流的当前位置提前一个字节。 |
4 | public virtual byte ReadByte() 从当前流中读取下一个字节,并将流的当前位置前进一个字节。 |
5 | public virtual byte[] ReadBytes(int count) 将当前流中指定的字节数读入字节数组,并将当前位置提前该字节数。 |
6 | public virtual char ReadChar() 从当前流中读取下一个字符,并根据所使用的编码和从流中读取的特定字符来提前流的当前位置。 |
7 | public virtual char[] ReadChars(int count) 从当前流中读取指定数量的字符,返回字符数组中的数据,并根据使用的编码和从流中读取的特定字符推进当前位置。 |
8 | public virtual double ReadDouble() 从当前流中读取一个8字节的浮点值,并将流的当前位置提前八个字节。 |
9 | public virtual int ReadInt32() 从当前流中读取一个4字节有符号整数,并将流的当前位置提前四个字节。 |
10 | public virtual string ReadString() 从当前流中读取字符串。 该字符串以长度为前缀,一次编码为整数7位。 |
BinaryWriter类
BinaryWriter类用于将二进制数据写入流。 通过将FileStream对象传递给其构造函数来创建BinaryWriter对象。
下表描述了BinaryWriter类的常用方法。
Sr.No. | 功能说明 |
---|---|
1 | public override void Close() 它会关闭BinaryWriter对象和底层流。 |
2 | public virtual void Flush() 清除当前写入器的所有缓冲区,并将所有缓冲的数据写入底层设备。 |
3 | public virtual long Seek(int offset, SeekOrigin origin) 设置当前流中的位置。 |
4 | public virtual void Write(bool value) 将一个字节的布尔值写入当前流,0表示false,1表示true。 |
5 | public virtual void Write(byte value) 将无符号字节写入当前流并使流位置前进一个字节。 |
6 | public virtual void Write(byte[] buffer) 将字节数组写入基础流。 |
7 | public virtual void Write(char ch) 将Unicode字符写入当前流,并根据使用的编码和写入流的特定字符推进流的当前位置。 |
8 | public virtual void Write(char[] chars) 将字符数组写入当前流,并根据使用的编码和写入流的特定字符推进流的当前位置。 |
9 | public virtual void Write(double value) 将一个8字节的浮点值写入当前流,并将流位置前移8个字节。 |
10 | public virtual void Write(int value) 将一个四字节有符号整数写入当前流,并将流位置前移四个字节。 |
11 | public virtual void Write(string value) 在BinaryWriter的当前编码中将长度前缀的字符串写入此流,并根据使用的编码和写入流的特定字符推进流的当前位置。 |
有关方法的完整列表,请访问Microsoft C#文档。
例子 (Example)
以下示例演示了读取和写入二进制数据 -
using System;
using System.IO;
namespace BinaryFileApplication {
class Program {
static void Main(string[] args) {
BinaryWriter bw;
BinaryReader br;
int i = 25;
double d = 3.14157;
bool b = true;
string s = "I am happy";
//create the file
try {
bw = new BinaryWriter(new FileStream("mydata", FileMode.Create));
} catch (IOException e) {
Console.WriteLine(e.Message + "\n Cannot create file.");
return;
}
//writing into the file
try {
bw.Write(i);
bw.Write(d);
bw.Write(b);
bw.Write(s);
} catch (IOException e) {
Console.WriteLine(e.Message + "\n Cannot write to file.");
return;
}
bw.Close();
//reading from the file
try {
br = new BinaryReader(new FileStream("mydata", FileMode.Open));
} catch (IOException e) {
Console.WriteLine(e.Message + "\n Cannot open file.");
return;
}
try {
i = br.ReadInt32();
Console.WriteLine("Integer data: {0}", i);
d = br.ReadDouble();
Console.WriteLine("Double data: {0}", d);
b = br.ReadBoolean();
Console.WriteLine("Boolean data: {0}", b);
s = br.ReadString();
Console.WriteLine("String data: {0}", s);
} catch (IOException e) {
Console.WriteLine(e.Message + "\n Cannot read from file.");
return;
}
br.Close();
Console.ReadKey();
}
}
}
编译并执行上述代码时,会产生以下结果 -
Integer data: 25
Double data: 3.14157
Boolean data: True
String data: I am happy