java.io.IOException:BufferedInputStream 在 Android 2.3 中已关闭

2023-11-27

以下代码在 Android 1.5-2.2.1 中运行良好,但在 2.3 及更高版本中则不行。

BufferedReader rd;
rd = new BufferedReader(new InputStreamReader(connection.getInputStream()));

StringBuffer sb = new StringBuffer();
String line;
while ((line = rd.readLine()) != null){
    sb.append(line);
}
rd.close();

堆栈跟踪:

01-30 08:21:42.668: WARN/System.err(594): java.io.IOException: BufferedInputStream is closed
01-30 08:21:42.668: WARN/System.err(594):     at java.io.BufferedInputStream.streamClosed(BufferedInputStream.java:116)
01-30 08:21:42.728: WARN/System.err(594):     at java.io.BufferedInputStream.read(BufferedInputStream.java:274)
01-30 08:21:42.728: WARN/System.err(594):     at org.apache.harmony.luni.internal.net.www.protocol.http.UnknownLengthHttpInputStream.read(UnknownLengthHttpInputStream.java:40)
01-30 08:21:42.758: WARN/System.err(594):     at java.io.InputStreamReader.read(InputStreamReader.java:255)
01-30 08:21:42.758: WARN/System.err(594):     at java.io.BufferedReader.fillBuf(BufferedReader.java:128)
01-30 08:21:42.758: WARN/System.err(594):     at java.io.BufferedReader.readLine(BufferedReader.java:357)

这是一个问题吗? 2.3有什么变化吗?


我也注意到了这一点。您可以做的一件事是在循环结束时检查 BufferedReader 的状态:

while((line = rd.readLine()) != null){
    sb.append(line);
    if (!rd.ready()) {
       break;
    }
}
rd.close();

然而,ready()不保证您的直播已结束。它仅检查流是否被阻止或关闭。 看developer.android.com 上的 BufferedReader.ready()

我认为这是 Android OS 2.3 及更高版本中引入的错误。请在 Android 官方网站上为 bug 做出贡献,以鼓励 Google 修复此问题。不幸的是,已经有许多设备配备了操作系统版本 2.3 至 2.3.3。

您的情况是,您可能在一次读取中到达了文件末尾,并且流自动关闭。我认为这是 Android 2.3 及更高版本中引入的错误。

glassonion 的帖子可以工作,但是该解决方法在长数据流上执行速度会非常慢。

由于移动应用程序可能随时失去互联网连接,因此您正在读取的InputStream可能只是被阻止并等待更多数据。

更合适的方法可能是在新线程上打开套接字,读取数据并等待超时,以防止连接速度缓慢。

下面的文章很好地解释了如何处理停滞的连接。阅读摘要应该足以让您信服。

所有好的网络应用程序都将包括超时检测和处理。无论您是编写客户端并需要检测不稳定的服务器,还是编写服务器并需要防止连接停滞,超时处理都是错误处理的关键部分。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java.io.IOException:BufferedInputStream 在 Android 2.3 中已关闭 的相关文章

  • 在包“android”中找不到属性“backgroundTint”的资源标识符

    我发现了一些视图 xml 属性 例如backgroundTint backgroundTintMode 但是当我使用它作为视图属性定义时 Eclipse 显示错误 No resource identifier found for attri
  • Android - 从资产中解析巨大(超大)JSON 文件的最佳方法

    我正在尝试从资产文件夹中解析一些巨大的 JSON 文件 我如何加载并添加到 RecyclerView 我想知道解析这种大文件 大约 6MB 的最佳方法是什么 以及您是否知道可以帮助我处理此文件的良好 API 我建议您使用GSON lib h
  • 在 ViewPager Fragments 中使用 Master/Detail 模板(下载链接)

    工作代码 https github com lukeallison ViewPagerMasterDetail https github com lukeallison ViewPagerMasterDetail Android 主 详细流
  • android xamarin 中的 reCaptcha

    我想在 Xamarin android 应用程序中实现验证码 我抓住了这个在 Android 中集成 googles reCaptcha 验证 https www c sharpcorner com article how to integ
  • Android Activity 生命周期函数基础知识

    我正在测试这段代码 它显示活动所处的状态 public class Activity101Activity extends Activity String tag Lifecycle Called when the activity is
  • 在 java 类和 android 活动之间传输时音频不清晰

    我有一个android活动 它连接到一个java类并以套接字的形式向它发送数据包 该类接收声音数据包并将它们扔到 PC 扬声器 该代码运行良好 但在 PC 扬声器中播放声音时会出现持续的抖动 中断 安卓活动 public class Sen
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • 发布android后更改应用内购买项目的价格

    在 Google Play 上发布后 是否可以更改应用内购买商品的价格 我假设该应用程序也已发布 完整的在线文档位于http developer android com http developer android com也http sup
  • Ubuntu 16.04 - Genymotion:找不到 /dev/hw_random

    I install Genymotion on the Ubuntu 16 04 64Bit I created a virtual emulator for Android 6 0 then I run this emulator but
  • 使用 Anypoint Studio (MULE) 在本地主机上找不到资源

    我尝试按照 MuleSoft 网站上建议的教程进行操作 我首先从这个例子开始
  • 如何使用InputConnectionWrapper?

    我有一个EditText 现在我想获取用户对此所做的所有更改EditText并在手动将它们插入之前使用它们EditText 我不希望用户直接更改中的文本EditText 这只能由我的代码完成 例如通过使用replace or setText
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • 在 android DatePickerDialog 中将语言设置为法语

    有什么办法可以让日期显示在DatePickerDialog用法语 我已经搜索过这个但没有找到结果 这是我的代码 Calendar c Calendar getInstance picker new DatePickerDialog Paym
  • HTTPWebResponse 响应字符串被截断

    应用程序正在与 REST 服务通信 Fiddler 显示作为 Apps 响应传入的完整良好 XML 响应 该应用程序位于法属波利尼西亚 在新西兰也有一个相同的副本 因此主要嫌疑人似乎在编码 但我们已经检查过 但空手而归 查看流读取器的输出字
  • 网站(Google 和/或您)应如何处理 Accept-Language 标头?

    很长一段时间以来 我对谷歌在以下情况下的行为并不满意 并且在无意中注意到之后80 其他人 https stackoverflow com questions 1011167 what are common ui misconceptions
  • 我的设备突然没有显示在“Android 设备选择器”中

    我正在使用我的三星 Galaxy3 设备来测试过去两个月的应用程序 它运行良好 但从今天早上开始 当我将设备连接到系统时 它突然没有显示在 Android 设备选择器 窗口中 我检查过 USB 调试模式仅在我的设备中处于选中状态 谁能猜出问
  • 增加活动的屏幕亮度

    显然 Android 操作系统中至少有三种不同的技术可以改变屏幕亮度 其中两个在纸杯蛋糕之后不再起作用 而第三个被接受的技术显然有一个错误 我想在单视图活动开始时增加屏幕亮度 然后在活动结束时将亮度恢复为用户设置 没有按钮 没有第二个视图或
  • 将 Intent 包装在 LabeledIntent 中以用于显示目的

    要求 我的应用程序中有一个 共享 按钮 我需要通过 Facebook 分享 我需要选择是否安装原生 Facebook 应用程序 我们的决定是 如果未安装该应用程序 则将用户发送到 facebook com 进行分享 当前状态 我可以检测何时
  • 将两个文本视图并排放置在布局中

    我有两个文本视图 需要在布局中并排放置 并且必须遵守两条规则 Textview2 始终需要完整显示 如果布局中没有足够的空间 则必须裁剪 Textview1 例子 文本视图1 文本视图2 Teeeeeeeeeeeeeeeeeextview1
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两

随机推荐

  • (Windows) 同时打开同一文件

    我正在尝试在 Windows 中打开一个文件以同时进行写入和读取 我有一个程序 每一秒 写入文件和一个从文件读取的程序 在unix中它可以完美工作 但在windows中不起作用 我无法打开已经打开的文件 我用 fopen 打开文件 我怎么解
  • 使用 IdentityServer4 保护 Web API 2.2

    我有 Web API 2 2 它使用 Net 4 5 2 框架 该框架由 angular2 应用程序使用 并且存在现有的 IdentityServer4 实现 我想使用 IdentityServer4 保护我的 Web API 我的问题是我
  • Volley - 直接下载到文件(内存中没有字节数组)

    我在 Android 项目中使用 Volley 作为我的网络堆栈 我的部分要求是下载可能非常大的文件并将其保存在文件系统上 我一直在研究 volley 的实现 似乎 volley 工作的唯一方式是将整个文件下载到一个可能很大的字节数组中 然
  • 当高度改变时,Chrome 不会重新计算宽度

    我有一个包含链接和图像的缩略图列表 因此当用户将鼠标悬停在li元素 它的高度变成100 但是它起作用的问题wrong由于某些奇怪的原因 在 Chrome 中 我不明白为什么在 Chrome 中悬停li宽度不会调整为 新 尺寸 注意 这是我的
  • CSS 中的 rem 和 em 有何不同?

    在网站源代码中 我有时看到开发人员使用rem单元 是否类似于em 我尝试看看它实际上做了什么 但它与什么相关 Demo HTML div Hello p World p div CSS div font size 1 4rem div p
  • Android NDK 构建 - 包括 LOCAL_SHARED_LIBRARIES?

    我在 Android NDK 下构建项目时遇到问题 最有可能的是由于未包含正确的共享 静态库 我添加了 lsomeLib 但 LOCAL SHARED LIBRARIES 似乎没有被包含在内 我的 Android mk 包含以下内容 LOC
  • 为什么这个 ptrace 程序说 syscall returned -38?

    它是一样的this one除了我正在跑步execl bin ls ls NULL 结果显然是错误的 因为每个系统调用都返回 38 user test test trace syscall 59 called with rdi 0 rsi 0
  • 如何创建一个在应用程序运行时始终运行的线程

    编辑 我现在确定问题与while true 循环保存所有其他命令 正如我已注释掉的那样 并且应用程序部署时没有附加的异常 我不确定它有多重要 但我的ServletContextListener实现看起来像这样 public class Bi
  • 迭代计算任意数量的集合的笛卡尔积

    我想计算任意数量的笛卡尔积nonempty在 Java 中设置 我已经写了迭代代码 public static
  • 如何从 netBeans 平台的菜单中删除项目?

    我有模块应用程序 当我运行它时 该应用程序的主窗口有相当复杂的菜单 如何从菜单中删除某些项目 您可以通过向项目的layer xml 文件添加条目来从菜单栏中删除菜单项 你应该通读 NetBeans 平台 HTML 编辑器 教程中的 调整用户
  • “$”的密钥代码是什么?

    我试图禁止在文本输入中输入所有其他字符 Since to get the you have to press the shift key and the 4 key I am not sure how you would get the k
  • R:从 h2o.randomForest() 和 h2o.gbm() 绘制树

    寻找一种有效的方法来在 rstudio H2O 的 Flow 或 h2o 的 RF 和 GBM 模型的本地 html 页面中绘制树木 类似于下面链接中的图像 具体来说 如何为下面的代码 可能通过解析 h2o download pojo rf
  • 将带有千位(和小数)分隔符的字符串转换为双精度

    用户可以输入double进入文本框 数字可能包含千位分隔符 我想在将输入的数字插入数据库之前验证用户输入 是否有一个 C 函数可以转换此类输入 1 555 99 into double 如果有 如果输入无效 它是否会发出错误信号 我不想以类
  • 按组划分的观察数量[重复]

    这个问题在这里已经有答案了 在 R 中 我有一个数据框 其中的观察结果由多个值描述 其中一个值是一个因子 我已按此因素对数据集进行排序 并希望添加一列 在其中我将获得该因素每个级别的大量观察结果 例如 factor obsnum a 1 a
  • ICE03:字符串溢出(大于列中允许的长度);表:自定义操作

    我收到以下代码的 ICE03 字符串溢出警告
  • 使用“.”的 Bash 脚本属性文件在变量名中

    我是 bash 脚本编写新手 对在 bash 脚本中使用 properties 文件中的属性有疑问 我见过一个 bash 属性文件使用 变量名之间 例如 this prop one someProperty 我已经看到它们是从脚本中调用的
  • 如何以编程方式添加 UITabBarController(无 xib 文件或情节提要)

    我想添加一个UITabBarController到我的应用程序 但我只能用代码来完成 没有 xib 文件或故事板 如何完全通过代码来做到这一点 EDIT tbc UITabBarController alloc init aboutUsVi
  • Global.asax 未处理的异常

    我正在通过电子邮件发送来自 global asax 的未处理异常详细信息 如何获取未处理异常的 aspx 文件或程序集文件的路径和 或文件名 当我开发和测试时 此信息显示在异常的堆栈跟踪中 当我将 global asax 部署到生产环境时
  • 实体框架 EF4.1 - 存储过程“在容器中找不到”

    我的数据库中有一个 SP 对于 EF4 1 使用数据库上下文API 从数据模型导入函数后 对存储过程的引用在我的开发环境中工作正常 但是 当发布到服务器时 它会失败并显示类似消息 在容器 TallyJ2Entities 中找不到 Funct
  • java.io.IOException:BufferedInputStream 在 Android 2.3 中已关闭

    以下代码在 Android 1 5 2 2 1 中运行良好 但在 2 3 及更高版本中则不行 BufferedReader rd rd new BufferedReader new InputStreamReader connection