2010-10-20 16 views

Trả lời

8

nếu bạn tìm nguồn của DataInputStream, bạn có thể thấy rằng nó cũng đóng các luồng cơ bản. vì vậy bạn không cần. và điều này là (hoặc phải là) đúng đối với tất cả các loại luồng.

+3

Thêm vào thời điểm, tài liệu được ghi lại. Nó bị phân mảnh một chút, nhưng 'DataInputStream' thừa hưởng' close' từ 'FilterInputStream', tài liệu mà nó gọi là' close' trên 'InputStream' cơ bản: http://download.oracle.com/javase/6/docs/api /java/io/FilterInputStream.html Vì vậy, bạn biết rằng hành vi không chỉ là một tác dụng phụ của việc triển khai cụ thể. –

+0

Trên thực tế nó là đúng cho tất cả các loại 'có thể đóng cửa ' –

+2

@Sherwin ... miễn là chúng thực hiện" hợp đồng "đúng cách :-) –

1

Karazi, có quyền đề xuất điều đó. Hơn nữa, chỉ để có được một ý tưởng và một cái nhìn sâu sắc hơn một chút, Java IO API thực sự được thực hiện bằng cách sử dụng mẫu trang trí. Bạn có thể xem decorator pattern trên wiki.

1

Tôi muốn đóng chặt trong một khối cuối cùng chỉ để đảm bảo nó được xả đúng cách trong trường hợp ngoại lệ.

public void tryToDoWhatever() throws Exception 
{ 
    DataInputStream in = null; 
    try 
    { 
     in = new DataInputStream(
       new BufferedInputStream(new FileInputStream(file))); 
    } 
    finally 
    { 
     if (in != null) 
      in.close(); 
    } 
} 
+0

Có bạn đúng nhưng điều này đặt ra một câu hỏi mới: Làm thế nào xử lý IOException có thể được ném bởi in.close ?? Thêm thử bắt cuối cùng hoặc chặn nó ở cấp cao hơn? –

+0

Có điều đó không hoàn toàn hopw Tôi thường làm điều đó – willcodejavaforfood

+0

@Manuel Selva - Tôi luôn tách biệt việc xử lý ngoại lệ khỏi logic nghiệp vụ. Tôi sẽ có một phương thức gọi là 'doWhatever()' gọi tryToDoWhatever trong khối try/catch để xử lý các ngoại lệ trong đó – willcodejavaforfood

3

Tôi sẽ sử dụng cơ hội này để trả lời bằng câu trả lời tôi đã thực hiện trước đây.

Bằng cách sử dụng Project Lombok bạn có thể cho phép Lombok đóng đúng các luồng cho bạn. Chi tiết có thể được tìm thấy here.

Các vấn đề liên quan