读取 HttpURLConnection InputStream - 手动缓冲区或 BufferedInputStream?

2023-12-13

读取 HttpURLConnection 的 InputStream 时,是否有理由使用以下其中一项而不是另一个?我已经在示例中看到了两者的使用。

手动缓冲器:

while ((length = inputStream.read(buffer)) > 0) {
    os.write(buf, 0, ret);
}

缓冲输入流

is = http.getInputStream();
bis = new BufferedInputStream(is);
ByteArrayBuffer baf = new ByteArrayBuffer(50);

int current = 0;
while ((current = bis.read()) != -1) {
     baf.append(current);
}

EDIT一般来说,我对 HTTP 还很陌生,但我想到的一个考虑因素是,如果我使用持久 HTTP 连接,我不能只读取直到输入流为空,对吗?在这种情况下,我是否不需要读取消息长度并只读取该长度的输入流?

同样,如果不使用持久连接,我包含的代码是否 100% 适合正确读取流?


我在博客上一篇关于在 android 中使用 JSON 的文章中讨论了一种好方法。http://blog.andrewpearson.org/2010/07/android-why-to-use-json-and-how-to-use.html。我将在下面发布相关帖子的相关部分(代码非常通用):

InputStream in = null;
String queryResult = "";
try {
     URL url = new URL(archiveQuery);
     HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
     HttpURLConnection httpConn = (HttpURLConnection) urlConn;
     httpConn.setAllowUserInteraction(false);
     httpConn.connect();
     in = httpConn.getInputStream();
     BufferedInputStream bis = new BufferedInputStream(in);
     ByteArrayBuffer baf = new ByteArrayBuffer(50);
     int read = 0;
     int bufSize = 512;
     byte[] buffer = new byte[bufSize];
     while(true){
          read = bis.read(buffer);
          if(read==-1){
               break;
          }
          baf.append(buffer, 0, read);
     }
     queryResult = new String(baf.toByteArray());
     } catch (MalformedURLException e) {
          // DEBUG
          Log.e("DEBUG: ", e.toString());
     } catch (IOException e) {
          // DEBUG
          Log.e("DEBUG: ", e.toString());
     }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

读取 HttpURLConnection InputStream - 手动缓冲区或 BufferedInputStream? 的相关文章

  • 捕获 Camera2 预览帧返回空缓冲区

    我一直在开发一个简单的 Android 应用程序 旨在将流式相机帧从 Android Camera2 API 管道传递到我的算法 我已经制作了几个应用程序 忠实地使用 Android Camera1 API 执行此操作 但即使在检查 Goo
  • HttpUrlConnection.getInputStream 在 Android 中返回空流

    我使用 HttpUrlConnection 向服务器发出 GET 请求 连接后 我收到响应代码 200 我收到回复消息 好的 我得到输入流 没有抛出异常 但是 在一个独立的程序中 我得到了响应的正文 如预期的那样 姓名 我的名字 生日 01
  • 如何在C#中有效地在桌面上绘图?

    我想用C 直接在桌面上画图 经过一番搜索 我最终使用了桌面 HDC 中的 Graphics 对象 空 然后 我使用这个 Graphics 对象正常绘画 问题是 当屏幕的任何部分被重绘时 我的形状就会丢失 我尝试了一个 While 循环 但它
  • 在Unity中如何使两个精灵的重叠区域透明?

    在Unity中如何使两个精灵的重叠区域透明 你能写一个关于它的着色器吗 经过一些研究 我了解到我应该使用模板缓冲区 但我不知道如何使用 这对我来说至关重要 我必须在 6 天内完成这个学校项目 请帮忙 示例图片 就这样 请记住这是我第一次使用
  • MultipartEntityBuilder 从 Android httpurlconnection 发送数据

    我正在尝试更改 HTTPClient 已弃用的代码 但我在 setEntity 上收到错误 因为它已损坏 而且我不知道如何通过新的 httpConnectionUrl 来 paas MultipartEntityBuilder 我旧的已弃用
  • 如何从InputStream转换为AudioInputStream

    是否可以从 InputStream 转换为 AudioInputStream 我想在某些事件中播放小声音文件 所以我做了以下 SoundThread import java io import javax sound sampled pub
  • getInputStream() 上的 java.io.FileNotFoundException

    我正在尝试从 URL 获取InputStream 连接响应代码是200 但我遇到了例外FileNotFoundException当我尝试 getInputStream 时 这是我的代码 url new URL http connection
  • 何时使用字节数组&何时使用字节缓冲区?

    字节数组和字节缓冲区有什么区别 另外 在什么情况下应该优先选择其中之一 我的用例是用 java 开发的 Web 应用程序 实际上有多种处理字节的方法 我同意 选择最好的并不总是那么容易 the byte the java nio ByteB
  • 发布 Google Maps API v2 Android 的流式传输方向

    因此 我的应用程序的一部分构建了一个导航方向字符串 然后尝试解析 JSON 并在地图上绘制折线路线 我首先使用位置变量或区域设置常量构建字符串 我最终得到类似的东西 https maps googleapis com maps api di
  • 如何直接从 ZipEntry(RubyZip、Paperclip、Rails 3)获取临时 File 对象(具有正确的内容类型,无需写入磁盘)?

    我目前正在尝试直接从 zip 文件将图像文件附加到模型 即不先将它们保存在磁盘上 似乎应该有一种更清晰的方法将 ZipEntry 转换为可以存储在内存中的临时文件或文件 以便传递给知道如何处理它的另一个方法或对象 这是我的代码 def ex
  • BufferedWriter在java中如何工作

    我经常将文本输出到文件中 我想知道一件事 怎么办BufferedWriterwork 当我打电话时它会在文件中写入文本吗writer write text 如果不写文本 我需要使用flush函数来写数据吗 例如 File file new
  • 在没有缓冲区的情况下将数据从 fstream 复制到 stringstream?

    无论如何 我可以从fstream 一个文件 到一个stringstream 内存中的流 目前 我正在使用缓冲区 但这需要双倍的内存 因为您需要将数据复制到缓冲区 然后将缓冲区复制到字符串流 直到删除缓冲区为止 数据都会在内存中复制 std
  • 使用 C++ 中的 java 套接字接收浮点数

    我需要使用套接字从 C 客户端到 java 服务器接收包含浮点数的数组或类 但 InputStreamReader 没有得到正确的结果 任何原因 任何有关更简单方法的建议将不胜感激 谢谢 Java服务器代码 public static vo
  • 使用 BufferedInputStream 进行套接字读取

    我正在使用Java的BufferedInputStream类读取发送到套接字的字节 发送到套接字的数据是 HTTP 形式 因此通常是具有定义的内容长度的标头 然后是一些内容 我遇到的问题是有时BufferedInputStream read
  • 如何在 Webpack 5 中为 jsonwebtoken 填充缓冲区

    我正在升级到 Webpack 5 并且 jsonwebtoken 包存在问题 https github com auth0 node jsonwebtoken https github com auth0 node jsonwebtoken
  • 将响应缓冲区转换为 JSON

    在 AWS 中 我使用 https 模块通过 Lambda 发出 get 请求 我能够返回数据 但当我调用时它是缓冲区格式的callback null obj https get options res gt res on data d g
  • 如何修改 HttpUrlConnection 的标头

    我试图稍微改进一下 Java Html 文档 但我遇到了问题HttpUrlConntion 有一件事是 如果用户代理是 Java VM 某些服务器会阻止请求 另一个问题是HttpUrlConnection不设置Referrer or Loc
  • HttpURLConnection (java.net.CookieManager) 和 WebView (android.webkit.CookieManager) 之间的 cookie 双向同步

    不幸的是 Android 有很多 cookie 管理器 饼干为HttpURLConnection由以下人员维护java net CookieManager和饼干WebView由以下人员维护android webkit CookieManag
  • 在 Golang Server 中接受持久的 tcp 连接

    我正在尝试使用 Go 并且想创建一个 TCP 服务器 我可以通过 telnet 访问该服务器 发送命令并接收响应 const CONN HOST localhost CONN PORT 3333 CONN TYPE tcp func mai
  • C++套接字256字节缓冲区

    我正在尝试在 C 中使用一些套接字网络编程 我正在尝试发送文本 Hello World 使用 C send 函数发送到服务器 首先 我将缓冲区的大小设置为 13 因为 Hello World 总共是 12 个字符 必须比字符数多 1 个 如

随机推荐

  • MySQL根据年份自动递增

    我正在创建一个票务系统 这是我的表结构 CREATE TABLE tix sip tktNum INT UNSIGNED NOT NULL sipNum INT UNSIGNED AUTO INCREMENT PRIMARY KEY sip
  • NSManagedObjectModel 版本标识符

    NSManagedObjectModel versionIdentifiers 的文档说 Core Data 框架不为模型提供默认标识符 也不在运行时依赖该值 对于在 Xcode 中创建的模型 您可以在模型检查器中设置此值 我不确定 但我认
  • 即使在 Xamarin 中安装 android v4 支持库后也会出错

    即使从 Xamarin 组件商店安装 v4 支持库后 我也会收到此错误 我尝试用谷歌搜索这些问题 但在开发 Android 应用程序时 我总是在 Xamarin Studio 中遇到相同的错误 This is Xamarin 错误 3249
  • 同时写入 XML 文件

    我有多个进程在不同的机器上运行 需要读取 写入共享的 XML 文件 为此我正在使用DOM with Java and FileLocks 虽然我知道数据库将是一种更有效的方法 但由于项目限制 这是不可行的 为了更改 XML 文件 相关进程首
  • 邻近搜索 谷歌地图

    我正在使用谷歌地图 v3 捕获名为 Locations 的 MS SQL 数据库表中的所有地址 该表将包含 LocationName LocationAddress LocationZip LocationState LocationCit
  • django 形式的多个图像与多重上传

    我需要将 django 形式的多个图像添加到一个模型中 我做了一项研究 对于 django 之外的表单 我尝试设置Django 多重上传 我的模型 py class Profile models Model first models Ima
  • 将数据帧模式加载到元数据表

    用例是读取文件并在其上创建数据框 之后获取该文件的架构并将其存储到数据库表中 例如 我只是创建一个案例类并获取 printschema 但是我无法从中创建数据框 这是示例代码 case class Employee Name String
  • ORA-01027: 尝试使用 if elseif 时不允许绑定变量进行数据定义

    我收到 ORA 01027 数据定义不允许绑定变量 procedure create dates testing dummy variable varchar2 default to char sysdate YYYYMMDD is beg
  • 在 ME49 中打开供应商的报价?

    我想打开编号为 的供应商的报价 175315 在 ME49 事务中 将光标定位在其编号上 在行3 并双击或按键盘上的 F2 键 当我检查 的技术信息175315 or 138992 表明EKKO LIFNR作为屏幕字段 LIFNR作为字段名
  • KERAS 中的自身损失函数

    我如何定义自己的损失函数 它需要 Keras 中先前层的权重和偏差参数 如何从每一层获取 W1 b1 W2 b2 Wout bout 在这里 我们需要传递比平常更多的变量 y true y pred 我附上了两张图片供您参考 我需要实现这个
  • 在GIT中“隐藏”东西

    这里是 Git 菜鸟 我知道这违反了 分布式源代码控制 的原则 但我想 密码保护 我的 GIT 存储库中的某些开发分支 也就是说 我不希望通过以下方式使用该分支git branch r 除了需要通过某种密码访问该分支的特定开发人员组 可能的
  • 如何创建半椭圆形(弯曲一条线)

    我正在尝试为我的形状创建一个自定义形状NavigationView页脚 作为背景 但不是那么干净 这就是我所做的 这就是我需要的 Code
  • iOS 类似 Web UI [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我见过几个有趣的移动设备网页 UI 看起来像 iOS 设备 无法弄清楚 我怎样才能实现类似的外观和感觉 导航栏 滚动 缩放 全屏 甚至在之后立即显示新页面 单击工具栏中的选项卡之一
  • ASP.Net Core MVC RedirectToAction 在 returnUrl 前面附加控制器名称

    我正在开发 ASP Net core MVC 6 应用程序 我有一个 AppControler 作为我的初始控制器 如果用户尝试转到具有 Authorize 属性的操作 我会重定向到我的 AuthController 进行登录 并传入 re
  • Apache 2.4.23 PHP7.x Windows 10 x64 php_curl 不工作

    我试图将我的服务器升级到最新的 Apache 2 4 23 和 PHP 7 1 但无法加载 php curl 库 不知道为什么 PHP Warning PHP Startup Unable to load dynamic library e
  • 当物品完成重新绘制时我可以收到通知吗?

    我正在制作快照 通过ShaderEffectSource with live false 的项目 但我有时 200 例中有 1 例 得到空白快照 我正在根据这样的信号制作快照 Image onStatusChanged if status
  • 用户注册后创建产品

    用户注册后是否可以自动创建产品 我正在创建一种市场 因此当用户注册为供应商时 我希望 Woocommerce 自动创建具有以下规格的产品 产品名称 预订 the author meta display name 产品块 日历 the aut
  • 反序列化时如何以字符串形式获取 XML 节点值

    我正在将 XML 发送到 aspnet core web api 命名空间前缀的值cfdi 定义在包含节点中
  • 从 ListView 到其父级的冒泡滚动事件

    在我的 WPF 应用程序中 我有一个ListView whose ScrollViewer VerticalScrollBarVisibility被设定为Disabled 它包含在一个ScrollViewer 当我尝试在ListView 外
  • 读取 HttpURLConnection InputStream - 手动缓冲区或 BufferedInputStream?

    读取 HttpURLConnection 的 InputStream 时 是否有理由使用以下其中一项而不是另一个 我已经在示例中看到了两者的使用 手动缓冲器 while length inputStream read buffer gt 0