Menulis data biner berarti menyimpan nilai dalam bentuk bit aslinya, bukan dalam bentuk teksnya. Angka 250 yang ditulis sebagai teks memakan tiga karakter, sedangkan nilai int yang sama hanya butuh empat byte dalam bentuk biner — dan bentuk biner bisa dibaca kembali tanpa proses parsing. Pasangan class BinaryWriter dan BinaryReader di System.IO menulis serta membaca tipe dasar secara biner.
Bagaimana BinaryWriter Menyusun Byte #
Setiap panggilan Write menyimpan satu nilai tipe .NET ke stream: int memakai 4 byte, double memakai 8 byte. Selain kedua tipe itu, Write punya overload untuk bool, char, short, long, decimal, dan array byte. String ditulis sebagai satu byte panjang (7-bit encoded length prefix) diikuti byte karakternya, sehingga pembaca mengetahui batas akhir teks tanpa informasi tambahan. Urutan penulisan menjadi kontrak: BinaryReader harus memanggil method baca dengan urutan yang persis sama.
Contoh Menulis dan Membaca Kembali #
string dir = Path.Combine(Path.GetTempPath(), "verify-6c", "menulis-file-biner");
Directory.CreateDirectory(dir);
string path = Path.Combine(dir, "angka.bin");
using (BinaryWriter penulis = new BinaryWriter(File.Create(path)))
{
penulis.Write(250);
penulis.Write(3.14);
penulis.Write("CSharp");
}
Console.WriteLine($"Ukuran file: {new FileInfo(path).Length} byte");
using BinaryReader pembaca = new BinaryReader(File.OpenRead(path));
int angka = pembaca.ReadInt32();
double nilai = pembaca.ReadDouble();
string teks = pembaca.ReadString();
Console.WriteLine($"{angka} | {nilai} | {teks}");Output yang Dihasilkan:
Ukuran file: 19 byte
250 | 3.14 | CSharpMari kita bedah baris demi baris:
new BinaryWriter(File.Create(path)): membungkus stream berkas untuk penulisan biner; akhir blokusingmenutup stream dan memastikan seluruh buffer tertulis.penulis.Write(250): menyimpan nilaiintsebanyak 4 byte.penulis.Write(3.14): menyimpan nilaidoublesebanyak 8 byte.penulis.Write("CSharp"): menyimpan satu byte panjang lalu enam byte karakter, total 7 byte; bersama dua baris sebelumnya 4 + 8 + 7 = 19 byte, tepat sama denganFileInfo.Length.- Tiga panggilan baca:
ReadInt32,ReadDouble, danReadStringdipanggil dengan urutan yang sama;ReadStringmembaca byte panjangnya sendiri sehingga tahu berapa karakter yang harus diambil.