2011-12-14 7 views
5

Trong đoạn mã sau, hàm đóng cho outPutStream ném một ngoại lệ IOException mà tôi nên nắm bắt. Câu hỏi của tôi là tôi cần phải xử lý nó? Vì tôi đang làm việc với các thiết bị di động và tôi muốn đảm bảo rằng tôi giải phóng tất cả các tài nguyên mà tôi sử dụng hoặc tôi có thể bỏ qua ngoại lệ một cách an toàn không.Tôi có cần xử lý hoặc bỏ qua IOException được kích hoạt bởi hàm closeSt() của OutputStream không?

//... 
OutputStream output = null; 
try { 
    output = connection.getOutputStream(); 
    output.write(query.getBytes(charset)); 
} finally { 
    if (output != null) try { 
     output.close(); 
    } catch (IOException e) { 
     // Do i need to do something here ? 
    } 
} 
+0

Bạn không bao giờ nên bỏ qua các ngoại lệ có thể bị ném, hãy xem khối tài nguyên Thử-Với mới trong Java 7, mã này có thể trông đẹp hơn một chút: http://docs.oracle.com/javase/ hướng dẫn/cần thiết/ngoại lệ/tryResourceClose.html –

+0

Bạn có thể làm gì với nó? – DaveRlz

+0

Vâng, cái đó luôn khiến tôi gãi đầu. Những gì tôi luôn làm là chỉ cần đăng nhập lỗi, để nếu nó xảy ra tôi biết nó đã làm - nhưng tôi không có đầu mối những gì sẽ phải làm gì để phục hồi trong tình huống này (nếu có). –

Trả lời

7

Nếu đóng không hoạt động, bạn có thể làm gì?

Điều duy nhất bạn có thể làm là chỉ cần đăng nhập ngoại lệ và như @mprabhat đã đề xuất bạn có thể đặt tham chiếu thành null để tăng tốc GC.

+0

Có ý nghĩa khi gọi flush() không? hoặc nó không thể được thực hiện. – Jimmy

+0

Tôi nghĩ rằng sẽ ném IOException cũng – stivlo

+0

Tôi nghĩ rằng nó dosent làm cho tinh thần, sau khi đọc một ít gần sẽ gọi tuôn ra đầu tiên. – Jimmy

0

Trong trường hợp xấu nhất, bạn có thể đưa ra cảnh báo. Nhưng nói chung, ngoại lệ như vậy được ném khi cố gắng đóng một phiên đã đóng. Trong trường hợp này, bạn không cần phải làm gì cả.

3

Tài liệu java không chi tiết về tất cả các điều kiện khác nhau gần sẽ ném một IOException do đó không có nhiều mà người ta có thể làm.

Ít nhất bạn có thể đặt tham chiếu là OutputStream thành không và ghi lại ngoại lệ.

+0

ý tưởng hay, có ý nghĩa khi đặt tham chiếu thành null +1 – stivlo

0

Trong Java hiệu quả Joshua Bloch đề cập đến đây là một trong những ngoại lệ bạn có thể muốn bỏ qua. Nói chung, mặc dù, ông nói, bạn muốn làm nhiều hơn với các trường hợp ngoại lệ hơn là chỉ đăng nhập chúng.