Tidak semua berkas berisi teks. Gambar, arsip, dan berkas hasil serialisasi tersusun atas barisan byte mentah yang tidak boleh diperlakukan sebagai karakter. Membaca berkas semacam itu dengan method teks akan mengubah byte yang bukan teks menjadi karakter pengganti, sehingga isinya tidak bisa dipulihkan. Untuk data biner, class File menyediakan pasangan method yang bekerja pada byte: WriteAllBytes dan ReadAllBytes.

Byte Array sebagai Wadah Data #

ReadAllBytes membaca seluruh isi berkas menjadi byte[] tanpa proses decoding apa pun, dan setiap elemennya bernilai 0 sampai 255. Untuk menampilkan byte secara terbaca oleh manusia, BitConverter.ToString memformatnya sebagai pasangan heksadesimal yang dipisah tanda hubung, misalnya 53-49-47. Bila hanya sebagian byte yang dibutuhkan, BinaryReader membaca satu byte lewat method ReadByte.

Contoh Membaca Berkas Biner #

Contoh berikut menulis enam byte, membacanya kembali utuh, lalu membaca dua byte pertama satu per satu:

csharp
string dir = Path.Combine(Path.GetTempPath(), "verify-6c", "membaca-file-biner");
Directory.CreateDirectory(dir);
string path = Path.Combine(dir, "tanda.bin");
File.WriteAllBytes(path, new byte[] { 0x53, 0x49, 0x47, 0x4E, 0x1A, 0x02 });

byte[] data = File.ReadAllBytes(path);
Console.WriteLine($"Jumlah byte: {data.Length}");
Console.WriteLine(BitConverter.ToString(data));

byte[] potongan = new byte[2];
using BinaryReader pembaca = new BinaryReader(File.OpenRead(path));
potongan[0] = pembaca.ReadByte();
potongan[1] = pembaca.ReadByte();
Console.WriteLine($"Dua byte pertama: {BitConverter.ToString(potongan)}");

Output yang Dihasilkan:

text
Jumlah byte: 6
53-49-47-4E-1A-02
Dua byte pertama: 53-49

Mari kita bedah baris demi baris:

  1. File.WriteAllBytes(path, ...): membuat berkas enam byte; nilai ditulis dalam notasi heksadesimal seperti 0x53 agar pola bitnya terlihat jelas.
  2. File.ReadAllBytes(path): mengembalikan seluruh isi sebagai byte[]; Length tetap 6 karena tidak ada konversi karakter yang dilakukan.
  3. BitConverter.ToString(data): memformat array menjadi teks heksadesimal 53-49-47-4E-1A-02; byte 0x53 sampai 0x4E adalah kode ASCII untuk huruf SIGN.
  4. new BinaryReader(File.OpenRead(path)): membuka berkas untuk pembacaan byte; using menjamin stream ditutup setelah selesai.
  5. Dua panggilan ReadByte(): mengambil byte satu per satu dari posisi terdepan; hasilnya 53-49, yaitu dua byte pertama berkas.