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