2012-12-25 8 views

Trả lời

2

Dường như không có gì trong API DocumentBuilder về nó. Chúng tôi có thể kiểm tra nó như là

InputStream is = new FileInputStream("test.xml") { 
    @Override 
    public void close() throws IOException { 
     System.out.println("close"); 
     super.close(); 
    } 
}; 
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
DocumentBuilder documentBuilder = dbf.newDocumentBuilder(); 
documentBuilder.parse(is); 

nó in close. Nhưng vì không có gì trong API về nó, hành vi này không được đảm bảo.

0

Nếu bạn sử dụng thử, bạn có thể để java đóng nó cho bạn. Nếu không, tôi sẽ khuyên bạn nên đóng nó bằng tay.

+0

Lưu ý rằng bạn cần thực hiện điều đó trên 'StringReader' dưới dạng' InputSource' không phải là 'AutoCloseable' –

0

InputStream nghĩa vụ phải được đóng cửa, kể từ close() phương pháp:

Đóng input stream này và phiên bản bất kỳ tài nguyên hệ thống liên quan đến suối.

Nó không quan trọng là dòng của bạn sử dụng các nguồn lực hay không - đó là cách tốt để đóng nó lại. Chỉ để được chắc chắn.

6

Do bạn không có tài nguyên bên ngoài - chỉ cần StringReader - bạn không cần cần để đóng tài khoản. Tôi sẽ làm như vậy anyway mặc dù ... sau đó nếu bạn đã bao giờ thay đổi mã để sử dụng một đầu vào khác nhau, bạn sẽ không vô tình có một rò rỉ tài nguyên.

(Đối với mã chỉ throwaway, tôi muốn rời khỏi nó -. Nhưng lưu ý rằng nếu bạn không cẩn thận, mã throwaway có một thói quen sống lâu hơn dự kiến)

0

InputSource chỉ là thuận tiện lớp wrapper trên luồng, do đó, nó không đóng luồng trong đó.

1

Bạn nên tự mình đóng nó.

Phương thức builder.parse không đóng luồng trong quá trình triển khai. Nó sẽ không biết khi nào phù hợp để đóng luồng, vì vậy điều này yêu cầu luồng được đóng theo cách thủ công.