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:
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:
Jumlah byte: 6
53-49-47-4E-1A-02
Dua byte pertama: 53-49Mari kita bedah baris demi baris:
File.WriteAllBytes(path, ...): membuat berkas enam byte; nilai ditulis dalam notasi heksadesimal seperti0x53agar pola bitnya terlihat jelas.File.ReadAllBytes(path): mengembalikan seluruh isi sebagaibyte[];Lengthtetap 6 karena tidak ada konversi karakter yang dilakukan.BitConverter.ToString(data): memformat array menjadi teks heksadesimal53-49-47-4E-1A-02; byte0x53sampai0x4Eadalah kode ASCII untuk hurufSIGN.new BinaryReader(File.OpenRead(path)): membuka berkas untuk pembacaan byte;usingmenjamin stream ditutup setelah selesai.- Dua panggilan
ReadByte(): mengambil byte satu per satu dari posisi terdepan; hasilnya53-49, yaitu dua byte pertama berkas.