2011-08-24 62 views
0

我爲android寫了一個web服務器。所以昨天我想添加上傳功能。Android:SocketServer讀取返回-1在上傳中

byte[] receivedBuffer = new byte[BUFFER_SIZE]; 
    BufferedInputStream bis = new BufferedInputStream(_client.getInputStream(), BUFFER_SIZE); 

    int bytesRead = 0; 

    while ((bytesRead = bis.read(receivedBuffer,0,BUFFER_SIZE)) != -1) { 

     //do stuff with bytes 

     if (bis.available() == 0) { 
     break; 
     } 
    } 
// this point 

我的問題是當我上傳比400kb更大的文件時,讀取在文件上傳中返回-1。如果我看bis.available()在「此時」,仍呈現> 0

我試圖改變

bytesRead = bis.read(receivedBuffer,0,BUFFER_SIZE) 

這個

bytesRead = bis.read(receivedBuffer) 

另一件事我想是降低緩衝區大小,它的工作一點點大文件。另外我添加了thread.sleep下面如果(bis.availabe()== 0,並且它再次有所幫助。它幾乎像bis還在加載網絡中的數據當我打電話閱讀,當時沒有任何東西,然後返回-1。

我需要幫助它已經兩天了,我正試圖讓這個工作。

+0

您是否在使用OutputStream進行上傳?這是服務器代碼還是Android應用程序代碼? – CrackerJack9

+0

不,我正在使用瀏覽器的HTML表單標籤。服務器代碼或部分 – Pintac

+0

服務器代碼。但就像我剛開始說的一個在android上運行的web服務器。 – Pintac

回答

0

解決了這個問題。我正在快速檢索數據,以至於即使有一些數據正在運行,可用方法有時也會返回0。因此,我只是添加一小會兒,檢查是否可用爲0,如果它是睡眠一段時間(10毫秒),並且如果在一秒之後它仍然可用== 0,那麼它突然發生。