Java 6 en iyi iç içe akışı kapatmak için bir yol
Not:Bu soru ve Cevaplar en Java 7 yayınlanmadan önce tarih. Java 7 Otomatik Kaynak Yönetimi işlevi, bu hizmeti yapmak için sağlar. Eğer Java 7 veya sonraki bir sürümünü kullanıyorsanız bu soru ve geçersiz olarak verdiği cevapları göz önünde bulundurmalısınız.
En kapsamlı, en iyi şekilde Java ile iç içe dere yakın olarak kabul edilir? Örneğin, Kur göz önünde bulundurun:
FileOutputStream fos = new FileOutputStream(...)
BufferedOS bos = new BufferedOS(fos);
ObjectOutputStream oos = new ObjectOutputStream(bos);
Kapatma işlemi sigortalı olmak (nihayet bir madde kullanarak muhtemelen) ihtiyacı anlıyorum. Merak ediyorum ne olduğunu, açıkça iç içe akışları kapalı olduğundan emin olmak için gerekli ya da yeterli sadece dış akış (Doğu) kapattığınızdan emin olun.
Fark ettiğim bir şey, en azından bu belirli bir örnek ile ilgili, iç akışları sadece FileNotFoundExceptions atmak gibi görünüyor. Teknik olarak eğer başarısız olurlarsa kapatma konusunda endişelenmenize gerek yok olduğunu ima etmek gibi görünüyor.
Bir meslektaşım şunu yazıyor:
Eğer doğru, dıştaki kapanış uygulanan olsaydı teknik olarak, akış (Doğu) yeterli olacaktır. Ama uygulama hatalı.
Örnek: İle başlar yıldız devralır close() olarak tanımlayan yıldız ( / * ):
155 public void close() throws IOException {
156 try {
157 flush();
158 } catch (IOException ignored) {
159 }
160 out.close();
161 }
Flush ise() bazı nedenlerden dolayı çalışma zamanı bir istisna atar, sonra dışarı.() yakın hiç aramadı. Öyle görünüyor ki "en güvenli" (ama) çirkin çoğunlukla dosyayı açık tutmak kapanış FOS, dert.
İç içe akarsu kapanış için--kesinlikle----emin zaman eller aşağı, en iyi yaklaşım olarak kabul nedir?
Ve en ince ayrıntısına kadar bu başa Güneş docs/herhangi bir resmi Java var mı?
CEVAP
Zincirli dere kapatırken, sadece dış akış kapatmak gerekiyor. Hatalar zinciri dağıtılmasını ve yakalandı.
Ayrıntılar için Java I/O Streams bakın.
Flush ise() bazı nedenlerden dolayı çalışma zamanı bir istisna, sonra dışarı atıyor.() yakın hiç aramadı.
Bu doğru değil. Ve bu özel durumu yakalamak görmezden sonra, yürütme Yukarı catch bloğundan sonra geri almak ve out.close()
deyim yürütülür.
Meslektaşınız hakkında iyi bir nokta yaparÇalışma zamanıÖzel durum. Eğer kesinlikle kapalı akışı gerekirse, her zaman her biri ayrı ayrı, dışarıdan, ilk özel durum durdurma kapatmak için deneyebilirsiniz.
Akışı doğru karakter kodlamasını belir...
Kodu nasıl Java Swing uygulaması kapat...
Nasıl bir Dizi için Java 8 Akışı Dönüş...
Neden char[] şifreler için Dize Java t...
Java kullanarak.net.Ateş ve işlemek iç...