2011-11-04 54 views
0

嗨,我有一個問題,我無法解決。 在我的Android \ java應用程序中,我調用腳本download.php。基本上它提供了一個文件輸出,我下載並保存在我的設備上。我必須在我的所有php腳本上添加一個控件,基本上就是向腳本發送一個令牌並檢查它是否有效。如果它是一個有效的標記,我會得到輸出(在這種情況下,其他腳本中的文件是一個json文件),如果不是,我會返回一個字符串「false」。java:錯誤檢查php輸出

要在我的其他Java文件檢查此條件,我用IOUtils方法輸入流變成一個字符串,檢查,而且比

InputStream newInputStream = new ByteArrayInputStream(mystring.getBytes("UTF-8")); 

再次獲得一個有效的輸入流和讀吧.. ....它與我的JSON文件,但不是在這種情況下......我得到這個錯誤:當我嘗試IOUtils.toString(inputStream, "UTF-8");

我認爲這是

11-04 16:50:31.074: ERROR/AndroidRuntime(32363): java.lang.OutOfMemoryError

因爲在此CA我試圖下載真正的長文件。

fileOutput = new BufferedOutputStream(new FileOutputStream(file,false)); 
inputStream = new BufferedInputStream(conn.getInputStream()); 

String result = IOUtils.toString(inputStream, "UTF-8"); 
if(result.equals("false")) 
{ 
    return false; 
} 
else 
{ 
    Reader r = new InputStreamReader(MyMethods.stringToInputStream(result)); 
    int totalSize = conn.getContentLength(); 
    int downloadedSize = 0; 
    byte[] buffer = new byte[1024]; 
    int bufferLength = 0; 
    while ((bufferLength = inputStream.read(buffer)) > 0) 
    { 
     fileOutput.write(buffer, 0, bufferLength); 
      downloadedSize += bufferLength; 
} 
fileOutput.flush(); 
fileOutput.close(); 
+0

文件多長/多大? – Mob

回答

1

請勿將流讀取爲開頭的字符串。將它保存爲二進制數據,並從讀取前5個字節開始。然後你可以檢查這5個字節是否是UTF-8中用於編碼「假」的5個字節,如果是這樣的話就會相應地採取行動。否則,將這5個字節寫入輸出文件,然後執行與之前相同的循環/讀取/寫入操作。請注意,要讀取這5個字節,您可能需要循環(但似乎不太可能)。也許你的IOUtils類可以說「讀取至少5個字節」?請問真實內容是否比更小比5個字節?

說實話,它會更好,如果你可以使用一個頭在響應以表示不同的結果,而不是隻是一個「假」身體 - 你的PHP腳本的控制?

+0

當然,我但但我不擅長與PHP。在我的腳本里面我有3個可能的輸出:1)打印json_encode($ something); 2)echo「false」3)readfile($ file);我怎麼能添加一個頭來知道我正在處理什麼樣的輸出?這將是最好的解決方案.... – Sgotenks