SORU
19 Mayıs 2009, Salı


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
19 Mayıs 2009, Salı


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.

Bu sorunu gidermek için

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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Doug Bernards

    Doug Bernard

    7 Kasım 2007
  • Fuse

    Fuse

    21 Kasım 2005
  • WePlayWeWatch

    WePlayWeWatc

    3 Temmuz 2013