I/O File Biner
Baca dan tulis byte mentah
I/O File Biner adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C++ Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C++ Academy mencakup 4 pelajaran total.
Teks vs Biner
Mode teks menulis karakter yang mudah dibaca manusia; mode biner menulis byte mentah objek persis seperti tersimpan di memori. Buka dengan std::ios::binary.
#include <iostream>
#include <fstream>
int main() {
int value = 12345;
std::ofstream out("v.bin", std::ios::binary);
out.write(reinterpret_cast<const char*>(&value), sizeof(value));
std::cout << "wrote " << sizeof(value) << " bytes\n";
return 0;
}write Mengambil Byte
write(ptr, n) mengeluarkan n byte mentah dari ptr. Anda mengubah alamat objek menjadi const char*.
#include <iostream>
#include <fstream>
int main() {
double d = 3.14;
std::ofstream out("d.bin", std::ios::binary);
out.write(reinterpret_cast<const char*>(&d), sizeof(d));
out.close();
std::cout << "saved a double\n";
return 0;
}read Memulihkan Byte
read(ptr, n) memuat n byte ke dalam objek pada ptr, sehingga membalikkan penulisan biner.
#include <iostream>
#include <fstream>
int main() {
int original = 777;
std::ofstream("i.bin", std::ios::binary).write(reinterpret_cast<const char*>(&original), sizeof(original));
int loaded = 0;
std::ifstream in("i.bin", std::ios::binary);
in.read(reinterpret_cast<char*>(&loaded), sizeof(loaded));
std::cout << loaded << '\n';
return 0;
}Menulis Struct POD
Struct data biasa (tanpa pointer, dengan anggota berukuran tetap) dapat ditulis dan dimuat kembali sebagai satu blok byte.
#include <iostream>
#include <fstream>
struct Record { int id; double balance; };
int main() {
Record r{1, 99.5};
std::ofstream out("rec.bin", std::ios::binary);
out.write(reinterpret_cast<const char*>(&r), sizeof(r));
std::cout << "struct saved\n";
return 0;
}Membaca Kembali Struct
Pembacaan memulihkan seluruh struct dalam satu pemanggilan read.
#include <iostream>
#include <fstream>
struct Record { int id; double balance; };
int main() {
Record w{42, 250.0};
std::ofstream("r2.bin", std::ios::binary).write(reinterpret_cast<const char*>(&w), sizeof(w));
Record r{};
std::ifstream in("r2.bin", std::ios::binary);
in.read(reinterpret_cast<char*>(&r), sizeof(r));
std::cout << r.id << ' ' << r.balance << '\n';
return 0;
}Menulis Array
Anda dapat menulis seluruh array dalam satu pemanggilan dengan memberikan ukuran totalnya dalam byte.
#include <iostream>
#include <fstream>
int main() {
int arr[5] = {1, 2, 3, 4, 5};
std::ofstream out("arr.bin", std::ios::binary);
out.write(reinterpret_cast<const char*>(arr), sizeof(arr));
std::cout << "wrote " << sizeof(arr) << " bytes\n";
return 0;
}Membaca Kembali Array
Bacalah jumlah byte yang sama ke dalam array dengan ukuran yang sama.
#include <iostream>
#include <fstream>
int main() {
int src[5] = {10, 20, 30, 40, 50};
std::ofstream("a2.bin", std::ios::binary).write(reinterpret_cast<const char*>(src), sizeof(src));
int dst[5] = {};
std::ifstream in("a2.bin", std::ios::binary);
in.read(reinterpret_cast<char*>(dst), sizeof(dst));
for (int x : dst) std::cout << x << ' ';
std::cout << '\n';
return 0;
}Mencari Posisi
seekg (get) dan seekp (put) memindahkan posisi baca/tulis, sehingga memungkinkan akses acak ke dalam berkas.
#include <iostream>
#include <fstream>
int main() {
int data[3] = {100, 200, 300};
std::ofstream("seek.bin", std::ios::binary).write(reinterpret_cast<const char*>(data), sizeof(data));
std::ifstream in("seek.bin", std::ios::binary);
in.seekg(sizeof(int)); // skip to second int
int second; in.read(reinterpret_cast<char*>(&second), sizeof(second));
std::cout << second << '\n';
return 0;
}Mengetahui Posisi
tellg dan tellp melaporkan posisi saat ini, yang berguna untuk mengukur ukuran berkas atau offset.
#include <iostream>
#include <fstream>
int main() {
int data[4] = {1, 2, 3, 4};
std::ofstream("tell.bin", std::ios::binary).write(reinterpret_cast<const char*>(data), sizeof(data));
std::ifstream in("tell.bin", std::ios::binary);
in.seekg(0, std::ios::end);
std::cout << "file size: " << in.tellg() << " bytes\n";
return 0;
}Mengapa Bukan Pointer?
Jangan pernah membuang objek yang berisi pointer atau std::string sebagai biner: Anda akan menyimpan alamat pointer, bukan data yang ditunjuknya. Sebagai gantinya, serialisasikan isinya.
#include <iostream>
#include <fstream>
#include <string>
int main() {
std::string s = "hello";
std::ofstream out("str.bin", std::ios::binary);
std::size_t len = s.size();
out.write(reinterpret_cast<const char*>(&len), sizeof(len));
out.write(s.data(), len); // write the chars, not the object
std::cout << "serialized " << len << " chars\n";
return 0;
}Catatan tentang Portabilitas
Tata letak biner bergantung pada urutan byte dan ukuran tipe. Berkas yang ditulis pada satu platform mungkin tidak dapat dibaca dengan benar pada platform lain, jadi tentukan format tetap untuk berbagi data.
#include <iostream>
#include <cstdint>
int main() {
std::int32_t fixed = 1; // fixed-width type for portability
std::cout << "sizeof int32_t = " << sizeof(fixed) << '\n';
return 0;
}Pemeriksaan Singkat
Uji pemahaman Anda tentang I/O biner.
Ringkasan
Anda telah mempelajari I/O berkas biner:
- buka dengan
std::ios::binary; gunakanwrite/readdenganreinterpret_cast<char*> seekg/seekpdantellg/tellpmenyediakan akses acak- jangan pernah membuang pointer atau string secara langsung; serialisasikan isinya dan waspadai urutan byte
Berikutnya, Anda akan mempelajari cara memeriksa status aliran dan menangani galat.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “I/O File Biner” gratis?
Ya — teks lengkap “I/O File Biner” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C++ Academy, upgrade ke CoddyKit PRO. Kursus C++ Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “I/O File Biner”?
Baca dan tulis byte mentah Kamu berlatih C++ Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C++ Academy?
Tidak diperlukan pengalaman sebelumnya. C++ Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “I/O File Biner” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C++ Academy ini?
Ya. Setiap pelajaran C++ Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.