Oleh : Reza Ervani
بسم الله الرحمن الرحيم
Stream dan Readers / Writers perlu ditutup dengan tepat saat kita selesai menggunakannya. Ini dilakukan dengan memanggil metode close()
. Ini membutuhkan sedikit tambahan pula. Perhatikan kode berikut :
InputStream input = new FileInputStream("/home/rezaervani/Documents/inputfile"); int data = input.read(); while(data != -1) { //melakukan sesuatu pada data ... doSomethingWithData(data); data = input.read(); } input.close();
Potongan kode diatas sekilas tampak oke. Tetapi apa yang terjadi jika suatu eksepsi dilemparkan dari dalam metode doSomethingWithData()
? Maka InputStream
tidak akan pernah tertutup.
Untuk menghindari hal tersebut, kita dapat menulis ulang kode tersebut seperti berikut :
InputStream input = null; try{ input = new FileInputStream("/home/rezaervani/Documents/inputfile</pre> <pre>"); int data = input.read(); while(data != -1) { //melakukan sesuatu pada data ... doSomethingWithData(data); data = input.read(); } }catch(IOException e){ //melakukan sesuatu pada e... log, mungkin rethrow dll. } finally { if(input != null) input.close(); }
Perhatikan bagaimana InputStream
sekarang ditutup didalam sebuah klausa final. Tidak peduli apapun yang terjadi di dalam blok-try, klausa final akan dieksekusi. Karenanya InputStream
akan selalu ditutup.
Tetapa apa yang terjadi jika close()
menghasilkan eksepsi ? Katakanlah stream sudah ditutup ? Untuk menangkap situasi tersebut, kita harus mengurung panggilan close()
di blok try-catch pula, seperti ini :
} finally { try{ if(input != null) input.close(); } catch(IOException e){ //lakukan sesuatu atau abaikan. } }
Kode yang menangani iterasi suatu InputStream
(atau OutputStream), dapat terlihat jelek seperti yang kita lihat diatas, apalagi saat kita menerapkan exception handling pula disana. Kode exception handling ini tidak bagus jika ada di sepanjang kode yang kita miliki secara berulang-ulang. Bagaimana jika seseorang terburu-buru dan melompati exception handling ?
Beruntung ada cara untuk mengatasi hal ini. Solusinya disebut “Exception Handling Templates”. Templat tersebut membuat suatu templat exception handling yang secarat tepat menutup stream kita setelah digunakan. Template ini cukup ditulis sekali dan digunakan berulang-ulang di kode kita. Bagus dan sederhana. Kita bahas itu secara terpisah di Template Exception Handling di Java.
Leave a Reply