Đọc và ghi binary file trong C#
Hai lớp BinaryReader và BinaryWriter trong C# được sử dụng để đọc và ghi một binary file (file nhị phân).
Lớp BinaryReader trong C#
Lớp BinaryReader trong C# được sử dụng để đọc dữ liệu nhị phân từ một file. Một đối tượng BinaryReader được tạo bằng cách truyền một đối tượng FileStream tới constructor của nó.
Bảng sau liệt kê các phương thức được sử dụng phổ biến của lớp BinaryReader trong C#:
Stt | Phương thức |
---|---|
1 | public override void Close()
Đóng đối tượng BinaryReader và Underlying Stream |
2 | public virtual int Read()
Đọc ký tự từ Underlying Stream và tăng vị trí hiện tại của stream |
3 | public virtual bool ReadBoolean()
Đọc một giá trị Boolean từ stream hiện tại và tăng vị trí hiện tại của stream thêm 1 byte |
4 | public virtual byte ReadByte()
Đọc byte kế tiếp từ stream hiện tại và tăng vị trí hiện tại của stream thêm 1 byte |
5 | public virtual byte[] ReadBytes(int count)
Đọc số byte đã cho từ stream hiện tại vào trong một mảng byte và tăng vị trí hiện tại bởi số byte đó |
6 | public virtual char ReadChar()
Đọc ký tự tiếp theo từ stream hiện tại và tăng vị trí hiện tại của stream mà phù hợp với Encoding đã sử dụng và ký tự cụ thể đang được đọc từ stream đó |
7 |
public virtual char[] ReadChars(int count)
Đọc số ký tự đã xác định từ stream hiện tại, trả về dữ liệu trong một mảng ký tự, và tăng vị trí hiện tại mà phù hợp với Encoding đã sử dụng và ký tự cụ thể đang được đọc từ stream đó |
8 |
public virtual double ReadDouble()
Đọc một giá trị số thực 8 byte từ stream hiện tại và tăng vị trí hiện tại của stream thêm 8 byte |
9 |
public virtual int ReadInt32()
Đọc một giá trị signed integer 4 byte từ stream hiện tại và tăng vị trí hiện tại của stream thêm 4 byte |
10 |
public virtual string ReadString()
Đọc một chuỗi từ stream hiện tại. Chuỗi được đặt trước với length, được mã hóa như là một integer 7 bit tại một thời điểm |
Lớp BinaryWriter trong C#
Lớp BinaryWriter được sử dụng để ghi dữ liệu nhị phân tới một stream. Một đối tượng BinaryWriter được tạo bằng cách truyền một đối tượng FileStream tới constructor của nó.
Bảng dưới liệt kê các phương thức được sử dụng phổ biến của lớp BinaryWriter trong C#:
Stt | Phương thức |
---|---|
1 | public override void Close()
Đóng đối tượng BinaryWriter và Underlying Stream |
2 | public virtual void Flush()
Xóa tất cả buffer cho Writer hiện tại và làm cho bất kỳ dữ liệu đã được đệm nào để được ghi tới Underlying Device |
3 | public virtual long Seek(int offset, SeekOrigin origin)
Thiết lập vị trí bên trong Stream hiện tại |
4 | public virtual void Write(bool value)
Ghi một giá trị Boolean 1 byte tới stream hiện tại, với: 0 biểu diễn false, 1 biểu diễn true |
5 | public virtual void Write(byte value)
Ghi một unsigned byte tới stream hiện tại và tăng vị trí stream thêm 1 byte |
6 | public virtual void Write(byte[] buffer)
Ghi một mảng byte tới underlying stream |
7 | public virtual void Write(char ch)
Ghi một ký tự Unicode tới stream hiện tại và tăng vị trí hiện tại của stream mà phù hợp với Encoding đã sử dụng và ký tự cụ thể đang được ghi tới stream đó |
8 | public virtual void Write(char[] chars)
Ghi một mảng ký tự tới stream hiện tại và tăng vị trí hiện tại của stream mà phù hợp với Encoding đã sử dụng và ký tự cụ thể đang được ghi tới stream đó |
9 | public virtual void Write(double value)
Ghi một giá trị số thực 8 byte tới stream hiện tại và tăng vị trí stream thêm 8 byte |
10 | public virtual void Write(int value)
Ghi một giá trị signed integer 4 byte tới stream hiện tại và tăng vị trí stream thêm 4 byte |
11 | public virtual void Write(string value)
Ghi một chuỗi có tiền tố dài tới stream này trong Encoding hiện tại của BinaryWriter, và tăng vị trí hiện tại của stream mà phù hợp với Encoding đã sử dụng và ký tự cụ thể đang được ghi tới stream đó |
Để có danh sách đầy đủ của các phương thức của lớp BinaryReader và BinaryWriter, bạn tham khảo Microsoft Documentation về C#.
Ví dụ
Dưới đây là ví dụ minh họa cách đọc và ghi dữ liệu nhị phân trong C#:
using System; using System.IO;namespace VietJackCsharp { class TestCsharp { static void Main(string[] args) { Console.WriteLine("Vi du minh hoa doc va ghi binary file trong C#"); Console.WriteLine("---------------------------------------------"); BinaryWriter bw; BinaryReader br; int i = 25; double d = 3.14157; bool b = true; string s = "Doc ghi binary file"; //tao file co ten la mydata try { bw = new BinaryWriter(new FileStream("mydata", FileMode.Create)); } catch (IOException e) { Console.WriteLine(e.Message + "\n Khong the tao file."); return; } //ghi du lieu vao file try { bw.Write(i); bw.Write(d); bw.Write(b); bw.Write(s); } catch (IOException e) { Console.WriteLine(e.Message + "\n Khong the ghi du lieu vao file."); return; } bw.Close(); //doc file try { br = new BinaryReader(new FileStream("mydata", FileMode.Open)); } catch (IOException e) { Console.WriteLine(e.Message + "\n Khong the mo file."); return; } try { i = br.ReadInt32(); Console.WriteLine("Du lieu int: {0}", i); d = br.ReadDouble(); Console.WriteLine("Du lieu double: {0}", d); b = br.ReadBoolean(); Console.WriteLine("Du lieu boolean: {0}", b); s = br.ReadString(); Console.WriteLine("Du lieu string: {0}", s); } catch (IOException e) { Console.WriteLine(e.Message + "\n Khong the doc file."); return; } br.Close(); Console.ReadKey(); } } }
Nếu bạn không sử dụng lệnh Console.ReadKey(); thì chương trình sẽ chạy và kết thúc luôn (nhanh quá đến nỗi bạn không kịp nhìn kết quả). Lệnh này cho phép chúng ta nhìn kết quả một cách rõ ràng hơn.
Biên dịch và chạy chương trình C# trên sẽ cho kết quả sau:
Bài học C# phổ biến khác tại hoconline.club: