Akışları Güvenle Kapatma
Kaynaklarla try kullanımı.
Akışları Güvenle Kapatma, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.
Akışlar Neden Kapatılmalı
BufferedReader gibi akışlar sistem kaynaklarını (dosya tanıtıcılarını, bellek arabelleklerini ve bağlantıları) ellerinde tutar. Bunları hiç kapatmazsanız bu kaynaklar sızabilir.
Bir akışı kapatmak, tuttuğu kaynakları serbest bırakır ve bekleyen verileri gönderir. Bu derste bunu güvenli şekilde nasıl yapacağınız gösterilmektedir.
close Metodu
Her okuyucunun bir close() metodu vardır. Bu metodu çağırmak kaynağı serbest bırakır.
System.in saran bir BufferedReader için kapatma işlemi, sarılan temel akışları da kapatır.
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
// ... use br ...
br.close();Eski ve Riskli Yöntem
close() metodunu elle çağırabilirsiniz; ancak bu satır çalışmadan önce bir hata oluşursa close() atlanır ve kaynak sızar.
close() metodunu bir finally bloğuna koymak yardımcı olur, ancak bu yöntem uzundur ve kolayca yanlış uygulanabilir.
BufferedReader br = null;
try {
br = new BufferedReader(
new InputStreamReader(System.in));
// ... use br ...
} finally {
if (br != null) br.close();
}Kaynak Yönetimli Deneme Yapısı
Java'nın daha temiz bir çözümü vardır: kaynak yönetimli deneme yapısı. Akışı try sonrasındaki parantezlerin içinde tanımlarsınız; Java, blok sona erdiğinde akışı otomatik olarak kapatır; hata oluşsa bile.
finally yoktur, elle close() çağırmanız gerekmez. Bu, günümüzde önerilen en iyi uygulamadır.
try (BufferedReader br =
new BufferedReader(new InputStreamReader(System.in))) {
String line = br.readLine();
System.out.println(line);
}Nasıl Çalışır
try (...) parantezlerinde tanımlanan her kaynak AutoCloseable arayüzünü uygulamalıdır. BufferedReader bunu yaptığı için Java onun close() metodunu sizin için çağırır.
Kapatma işlemi, blok normal şekilde veya bir özel durum nedeniyle sona erse de blok tamamlandıktan sonra gerçekleşir.
Tam Bir Örnek
Burada, bir satır okumak için kaynak yönetimli deneme yapısını kullanan eksiksiz bir program verilmiştir. Okuyucu, bloğun sonunda otomatik olarak kapanır.
Program System.in üzerinden okuma yaptığı için girdi bekler ve burada otomatik olarak çalıştırılamaz.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
try (BufferedReader br = new BufferedReader(
new InputStreamReader(System.in))) {
String name = br.readLine();
System.out.println("Hi " + name);
}
}
}StringReader ile Çalıştırılabilir
Klavye girdisi olmadan kaynak yönetimli deneme yapısının çalıştığını kanıtlamak için burada StringReader üzerinden okuma yapılmaktadır. Bu örnek tamamen çalıştırılabilirdir.
Bloktan sonra okuyucu otomatik olarak kapatılır; herhangi bir close() çağrısı yazmazsınız.
import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
try (BufferedReader br =
new BufferedReader(new StringReader("done"))) {
System.out.println(br.readLine());
}
}
}Birden Çok Kaynak
Tek bir try içinde, noktalı virgüllerle ayırarak birkaç kaynak tanımlayabilirsiniz. Java bunların tümünü, tanımlanma sırasının tersine kapatır.
Bu, birden çok akışı art arda sardığınızda kullanışlıdır.
try (InputStreamReader isr =
new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr)) {
System.out.println(br.readLine());
}IOException Yakalama
Okuma işlemi IOException oluşturabilir. throws bildirmek yerine bunu ele almak için kaynak yönetimli deneme bloğuna bir catch ekleyebilirsiniz.
catch çalışmadan önce kaynak yine otomatik olarak kapatılır.
try (BufferedReader br = new BufferedReader(
new InputStreamReader(System.in))) {
System.out.println(br.readLine());
} catch (IOException e) {
System.out.println("Read failed");
}System.in Kapatılmalı mı?
Bir uyarı: System.in üzerindeki bir okuyucuyu kapatmak, System.in'in kendisini de kapatır ve onu yeniden açamazsınız.
Kısa programlar için bu sorun değildir. Ancak daha sonra konsol girdisine hâlâ ihtiyacınız varsa bu belirli okuyucuyu kapatmayın. Akışınızın neyi sardığını bilin.
En İyi Uygulamalar
Akışları güvenli şekilde yönetmek için:
- Elle
close()kullanmak yerine kaynak yönetimli deneme yapısını tercih edin. - Hatalar oluştuğunda bile akışları otomatik olarak kapatır.
System.inokuyucusunu kapatmanın standart girdiyi de kapattığını unutmayın.
Kaynakların temiz şekilde yönetilmesi sızıntıları ve hataları önler.
Hızlı Kontrol
Kaynak yönetimli deneme yapısının temel yararını düşünün.
Özet
Akışların neden kapatılması gerektiğini, riskli elle/finally yaklaşımını ve AutoCloseable kaynaklarını otomatik olarak kapatan temiz kaynak yönetimli deneme yapısı kalıbını öğrendiniz.
Artık BufferedReader ile girdiyi baştan sona güvenli şekilde okuyabilirsiniz.
Sıkça Sorulan Sorular
“Akışları Güvenle Kapatma” dersi ücretsiz mi?
Evet — “Akışları Güvenle Kapatma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.
“Akışları Güvenle Kapatma” dersinde ne öğreneceğim?
Kaynaklarla try kullanımı. Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Java Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Akışları Güvenle Kapatma” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- BufferedReader Neden Kullanılır
- Satırları Okuma
- Girdiden Sayıları Ayrıştırma
- Akışları Güvenle Kapatma