2013-01-04 20 views
5

Java posta API'sini kullanarak bir eklentiyi indiriyorum ve ağ durumunda küçük bir değişiklik olduğunda, uygulamam takılıyor ve onu yeniden başlatmam gerekiyor, hatta çöküyor bile değil.InputStream - Ağ değişiklikleri ile başa çıkmak

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(); 
} 

bu konuyla ilgilenmesi için en iyi yolu nedir: Bu kod parçacığı nedir? Teşekkürler.

+1

Girdi akışını 'BufferedInputStream' ile sarmayı deneyin ve 'skip()' yönteminin burada desteklenip desteklenmediğine bakın (IOException'ı atar veya atmaz). Eğer evet ise, o zaman önceki indirmeye devam etme yeteneğine sahip olursunuz. –

+0

Merhaba, teşekkürler, IOException atıyor. Bana önceki indirme işlemine nasıl devam edebileceğimi ve uygulamanın donmasıyla nasıl ilgili olduğunu nasıl söyleyebilirim? – Tsikon

+0

Eğer skip() 'yi destekliyorsa, 'Önceki indirme işlemine devam etmeyi' destekleyecektir. Ancak, düşünebildiğim tek seçenek 'is.read()' üzerinde bir zaman aşımı olması ve zaman aşımı süresini aşması durumunda, indirme işlemini sonlandırmanız ve tekrar baştan başlamanız gerekir. Bu soruya bakın: http://stackoverflow.com/questions/804951/is-it-possible-to-read-from-a-inputstream-with-a-timeout –

cevap

1

Uygulamanız sıkışmış. Çözüm, this question'da açıklandığı gibi bir okuma zaman aşımı ayarlamaktır. Zaman aşımı oluşursa, bir SocketTimeoutException atılır.

+0

Aşağıdaki tüm zaman aşımlarına sahibim: \t props2.setProperty ("mail.imaps.connectionpooltimeout", "3000"); \t props2.setProperty ("mail.imaps.connectiontimeout", "3000"); \t props2.setProperty ("mail.imap.timeout", "3000"); Ve yine de Message detayları alırken, örneğin message.getSubject(). Garip bir şekilde sadece 3g'den WI-FI'ya geçerken olur. WI-FI'dan 3g'ye geçtiğimde, FolderClosedException'ı atar ve bunu halledebilirim. – Tsikon

+0

Teşekkürler, zaman aşımı özelliğindeki imapların imaplarını değiştirerek çözdüm. – Tsikon

İlgili konular