File Binary dan ASCII

2008 | Direktorat Pembinaan SMK 413 pengguna komputer dapat mengerti karena ACSII merupakan pengkodean yang mengacu pada bahasa manusia. Misalnya ketika programer menulis file dengan nama prog.cc secara otomatis file tersebut berupa kode ASCII. Sebuah terminal seperti keyboard, printer berhubungan dengan data karakter. Ketika sesorang menulis angka seperti 1234 yang kemudian muncul pada layar monitor, angka tersebut harus dikonversi menjadi empat karakter “1”, “2”, “3”, dan “4” . Hal yang sama juga ketika seseorang membaca angka dari keyboard, sebuah data harus dikonversi dari data karakter menjadi data integer. Hal ini dikerjakan oleh operator . Karater ASCII “0” mempunyai nilai 48, “1” mempunyai nilai 49 dan seterusnya seperti terlihat pada lampiran kode ASCII. Ketika sesorang akan mengubah digit tunggal dari kode ASCII menjadi integer akan sama halnya anda mengubah menjadi data 48. Perhatikan program dibawah ini: int integer; char ch; ch = 5; integer = ch ‐ 48; cout Integer integer \n; Daripada mengingat karakter “0” yang lebih sulit dingat dengan 48, lebih baik mengkonversi menjadi karakter ‘0’. Perhatikan program dibawah ini: integer = ch ‐ 0; komputer bekerja dengan data biner. Ketika komputer membaca dari file ASCII, program pada komputer memproses data karakter melalui routine konversi seperti routine konversi integer yang telah didefinisikan. Operasi ini akan menjadi lebih mahal dikarenakan membutuhkan ruang memori dan waktu. Sebuah file biner tidak membutuhkan konversi. File-file tersebut umumnya memakai ruang yang kecil dibandingkan file kode ASCII. Kelemahan pada file biner adalah tidak bisa dicetak secara langsung pada terminal atau printer. Jika file biner dicetak pada printer secara langsung tanpa adanya konversi yang terjadi adalah data cetak tidak sesuai seperti terlihat “AaAAJHCX. Tentunya apa yang akan terjadi jika dicoba mencetak file biner. File ASCII marupakan file portbel karena banyak dipakai. File ini dapat dipindah dari satu mesin ke mesin yang lain dengan sedikit kesalahan. File biner bisa dikatakan pasti tidak portabel. File mana yang harus digunakan? Dalam beberapa kasus ASCII sangat baik. Alasan ini dikemukakan jika mempunyai data dengan jumlah kecil atau medium waktu konversi tidak begitu mempengaruhi unjuk kerja program yang telah dibuat. Selain itu file ASCII juga membuat dalam melakukan verifikasi data. Hanya ketika menggunakan sejumlah data yang besar saja akan memakan ruang dan mempengaruhi unjuk kerja sehingga diperlukan data dalam format biner. 414 Direktorat Pembinaan SMK | 2008

12.8. Binary IO

Input atau output file biner dapat diselesaikan melalui dua fungsi keanggotaan yaitu: read and write. Penulisan atau sintak untuk membaca adalah: in_file.readdata_ptr, size; dimana data_ptr merupakan pointer sebagai tempat untuk meletakan data dan size merupakan angka dalam ukuran byte yang akan dibaca. Fungsi keanggotaan qcount akan mengembalikan sejumlah byte data yang telah dibaca pada akhir. Hal ini dimungkinkan akan berkurang diandingkan dengan jumlah byte yang diminta. Sebagai contoh pembacaan yang mungkin ditemui pada akhir file atau ditemukan adanya kesalahan. struct { int width; int height; } rectangle; in_file.readstatic_castchar rectangle, sizeofrectangle; if in_file.bad { cerr Tidak dimungkinkan membaca rectangle\n ; exit 8 ; } if in_file.gcount = sizeofrectangle { cerr Error: tidak bisa untuk membaca \n ; cerr IO mengalami error, EOF tidak bisa dihitung\n ; } Dalam contoh program diatas ketika sedang membaca sebuah struktur persegi panjang. Sebuah operator akan membuat persegi panjang tersebut manuju sebuah pointer. Kemudian sebuah sintak static_castchar dibutuhkan setelah read menginginkan sebuah deretan array. Sebuah operator sizeof digunakan untuk menentukan berapa banyak byte yang dibaca sebaik pengecekan tersebut sampai operasi tersebut menjadi berhasil. Sebuah keanggotaan fungsi write telah memanggil secara sekuensial sama dengan operasi read adalah dengan sintak: out_file.writedata_ptr, size;

12.9. Buffer

Buffer atau sering kita artikan sebagai penahan atau penyangga suatu memori sebuah data. Penyangga sebuah I O tidak bisa ditulis secara langsung pada sebuah file. Sebuah data akan dijaga keberadaanya dalam sebuah buffer sampai disana cukup untuk menulis 2008 | Direktorat Pembinaan SMK 415 dalam kapasitas data besar atau sampai sebuah buffer disegarkan kembali. Sebuah program yang mengikuti dirancang untuk dicetak pesan cepat sampai setiap bagian terselesaikan. Perhatikan potongan program dibawah ini: cout mulai ; do_step_1 ; cout langkah 1 complete ; do_step_2 ; cout langkah 2 complete ; do_step_3 ; cout langkah 3 complete\n ; sebagai ganti dari menulis sebuah pesan sampai pada tiap langkah selesai, cout pesan tersebut diletakan dalam sebuah buffer. Hanya setelah program selesai maka selanjutnya buffer memperleh penyegaran atau pengosongan dan semua pesan yang datang ditumpahkan keluar dengan seketika. Sebuah manipulator IO flush akan menyegarkan buffer-buffer tersebut. Sifat yang ditulis diatas diberikan contoh seperti pada program dibawah ini: cout mulai flush; do_step_1 ; cout Langkah 1 complete flush; do_step_2 ; cout langkah 2 complete flush; do_step_3 ; cout langkah 3 complete\n flush; karena tiap pernyataan keluaran berakhir dengan flush, sebuah keluaran akan ditampilkan secara langsung. Ini artinya bahwa penyelesaian pesan akan datang sesuai dengan waktunya. Dalam IO buffer, data ditahan dan kemudian dikirim dalam bentuk file, sedangkan dalam IO tidak terbuffer data secara langsung dikirim dalam bentuk file. Analogi ini disampaikan dalam bentuk kejadian di lingkunang kita pada sejumlah penjepit kertas yang jatuh kelantai seseorang dapat mengambilnya dalam mode buffer atau tanpa buffer. Dengan mode buffer jika anda menggunakan tangan kanan untuk mengambil penjepit kertas dan kemudian memindahkan penjepit ke tangan kiri. Proses tersebut diulang- ulang sampai pada tangan kiri penuh kemudian penjepit tersebut dipindahkan ke dalam kotak yang ada diatas meja. Dengan buffer IO akan ada media sementara yang digunakan untuk menampung sebelum dipindahkan ke media yang utama dan lebih besar. Dalam mode tanpa buffer, dapat dianalogikan seperti anda mengambil sejumlah penjepit kertas yang jatuh dilantai dan langsung memasukan kedalam kotak yang berada diatas meja. Pekerjaan ini dilakukan dengan tangan kanan tanpa menggunakan tangan kiri sebagai penampung sementara. Dalam kebanyakan kasus, IO dengan buffer sering digunakan daripada tanpa buffer. Dalam IO tanpa buffer tiap pembacaan dan penulisan membutuhkan pemanggilan system. Beberapa pemanggilan pada sisem operasi sangat mahal dan membutuhkan waktu yang banyak, sehingga dengan IO yang menggunakan