gpt4 book ai didi

java:检查 php 输出时出错

转载 作者:行者123 更新时间:2023-12-01 15:41:12 24 4
gpt4 key购买 nike

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

为了检查其他 java 文件中的这种情况,我使用 IOUtils 方法将输入流转换为字符串,检查它,然后

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

最佳答案

不要将流作为字符串读取。将其保留为二进制数据,并从读取前 5 个字节开始。然后,您可以检查这 5 个字节是否是用于在 UTF-8 中编码“false”的 5 个字节,如果是,则采取相应的操作。否则,将这 5 个字节写入输出文件,然后执行与之前相同的循环/读取/写入。请注意,要读取这 5 个字节,您可能需要循环(尽管看起来不太可能)。也许您的 IOUtils 类有“读取至少 5 个字节”的内容?真实内容会小于 5 个字节吗?

说实话,如果您可以在响应中使用 header 来指示不同的结果,而不是仅仅使用带有“false”的正文,那就更好了 - 您是否可以控制 PHP 脚本?

关于java:检查 php 输出时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8013701/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com