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