java:错误检查php输出

时间:2011-11-04 17:51:09

标签: java inputstream

嗨,我有一个问题,我无法解决。 在我的Android \ java应用程序中,我调用脚本download.php。基本上它提供了一个输出文件,我下载并保存在我的设备上。我必须在我的所有php脚本上添加一个控件,它基本上包括向脚本发送一个令牌并检查它是否有效。如果它是一个有效的令牌,我将获得输出(在这种情况下,在其他脚本中的文件是一个json文件)如果它不是我得到一个字符串“false”。

要在我的其他java文件中检查这个条件,我使用IOUtils方法将输入流转换为String,检查它,然后

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

再次获取有效的输入流并读取它......它适用于我的JSon文件,但不是在这种情况下......我收到此错误:

  

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

当我尝试IOUtils.toString(inputStream, "UTF-8");

我认为这是因为在这种情况下我正在尝试下载非常长的文件。

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

1 个答案:

答案 0 :(得分:1)

不要将流读作字符串开头。将它保存为二进制数据,然后只需读取前5个字节即可。然后,您可以检查这5个字节是否是用于在UTF-8中编码“false”的5个字节,如果是这样,则相应地执行操作。否则,将这5个字节写入输出文件,然后像以前一样进行相同的循环/读/写操作。请注意,要读取可能的那5个字节需要循环(但不太可能)。也许你的IOUtils类有话说“读取至少5个字节”?真实内容是否小于超过5个字节?

老实说,如果你可以在响应中使用一个标题来表示不同的结果,而不仅仅是一个带有“false”的主体,那会更好吗?你能控制PHP脚本吗?