2013-01-04 29 views
5

Tôi đang tải xuống tệp đính kèm bằng API thư Java và bất kỳ khi nào có thay đổi nhỏ về trạng thái mạng, ứng dụng của tôi bị kẹt và tôi phải khởi động lại, thậm chí không bị lỗi. Đây là đoạn mã:InputStream - Xử lý các thay đổi mạng

InputStream is = bodyPart.getInputStream(); 

String fileName = MimeUtility.decodeText(bodyPart.getFileName()); 

// Downloading the file 
File f = new File(Constants.getPath() + fileName); 
try { 
    FileOutputStream fos; 
    fos = new FileOutputStream(f); 

    byte[] buf = new byte[8*1024]; 
    int bytesRead; 

    while ((bytesRead = is.read(buf)) != -1) { 
    fos.write(buf, 0, bytesRead); 
    } 
    fos.close(); 
} 

Cách tốt nhất để giải quyết vấn đề này là gì? Cảm ơn.

+1

Cố gắng bao bọc luồng đầu vào bằng 'BufferedInputStream' và xem liệu phương thức' skip() 'có được hỗ trợ ở đây hay không (Nó có ném IOException hay không). Nếu có, thì bạn sẽ có khả năng tiếp tục tải xuống trước đó. –

+0

Xin chào, cảm ơn, Nó ném IOException. Bạn vui lòng cho tôi biết làm thế nào tôi có thể tiếp tục tải xuống trước đó và làm thế nào nó liên quan đến thực tế là các ứng dụng bị đóng băng? – Tsikon

+0

Nếu nó hỗ trợ 'skip()', thì nó sẽ hỗ trợ 'Tiếp tục tải xuống trước đó'. Tuy nhiên, tùy chọn duy nhất tôi có thể nghĩ là có một thời gian chờ trên 'is.read()', và nếu nó xảy ra vượt quá khoảng thời gian chờ, sau đó bạn nên chấm dứt việc tải xuống và bắt đầu lại. Xem câu hỏi SO này: http://stackoverflow.com/questions/804951/is-it-possible-to-read-from-a-inputstream-with-a-timeout –

Trả lời

1

Ứng dụng của bạn bị kẹt. Giải pháp cho điều đó là đặt thời gian chờ đọc, như được thảo luận trong this question. Nếu thời gian chờ xảy ra một SocketTimeoutException sẽ được ném.

+0

Tôi có tất cả thời gian chờ sau: \t props2.setProperty ("mail.imaps.connectionpooltimeout", "3000"); \t props2.setProperty ("mail.imaps.connectiontimeout", "3000"); \t props2.setProperty ("mail.imap.timeout", "3000"); Và nó vẫn stucks khi nhận được thông tin chi tiết tin nhắn, ví dụ message.getSubject(). Điều lạ lùng xảy ra chỉ khi chuyển từ 3g sang WI-FI. Khi tôi chuyển từ WI-FI sang 3G, nó sẽ ném FolderClosedException và sau đó tôi có thể xử lý việc này. – Tsikon

+0

Cảm ơn, tôi đã giải quyết nó bằng cách thay đổi imap thành imaps trong thuộc tính timeout. – Tsikon

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