[英]Android/Java InputStream becomes empty (unreadable)
我正在努力解决一个似乎比起初复杂得多的问题。
我使用一个SDK,该SDK向我传递了一个InputStream,我应该使用它来发出http请求(该流用于设置主体-对于某些请求是可选的)。 我正在使用HttpURLConnection发出请求并获得响应。
一旦我通过静态方法将InputStream(在自定义模型对象中找到)发送到另一个类,就会出现问题。
RequestManager.startRequest(request, callback);
该请求包含InputStream。 在这一点上似乎是正确的。
尝试在RequestManager类或其他类中尝试访问InputStream时,它为空。
我必须指出,它被发送到由RequestManager处理的另一个线程。
可能是什么问题呢? 我进行了一些调试,InputStream似乎与SDK发送的对象相同。 线程运行时,InputStream会发生什么情况吗?
LE( 读取InputStream的方法 ):
private String readStream(InputStream inputStream) {
BufferedReader br = new BufferedReader(new InputStreamReader((inputStream)));
StringBuilder sb = new StringBuilder();
String output;
try {
while ((output = br.readLine()) != null) {
sb.append(output);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
如果我在调用startRequest()之前立即使用此方法,它将返回应该设置为请求正文的String。
一旦我尝试在管理器中使用此方法,它将返回一个空的String。
LE:添加了从SDK接收到的调试InputStream的屏幕截图 从SDK读取InputStream-将其发送给管理器之前
设置正文之前,请先在管理器中阅读InputStream
LE:更新
我进行了更多测试,当直接从另一个线程访问InputSream时,似乎正在发生这种情况。 如果在创建的同一个线程上访问InputStream,则一切工作正常,但是一旦其他某个线程尝试访问它,则它变得不可用(似乎读取被阻止)。
如上所述,偏移量是不同的。 因此,您应该在第二次读取之前重置流(inputStream.reset();)。 这是我的建议和答案。 希望对您有所帮助!
更新:
公共同步无效重置()
将此流重置到最后标记的位置。 如果自设置标记以来已读取的字节数大于提供给标记的限制,或者未设置标记,则抛出IOException。
我认为您应该再次检查所有代码
此外,请参考以下问题,希望您尽快解决问题:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.