使用 BufferedInputStream 进行套接字读取

2024-04-24

我正在使用Java的BufferedInputStream类读取发送到套接字的字节。 发送到套接字的数据是 HTTP 形式,因此通常是具有定义的内容长度的标头,然后是一些内容。

我遇到的问题是有时BufferedInputStream.read()不会读取发送给它的全部数据量。它返回读取的字节数,但这比发送的字节数少得多。我已经验证了使用 Wireshark 发送的字节,并且可以确认正在传输完整的消息。)

示例代码如下:

BufferedInputStream inFromClient = new BufferedInputStream(socket.getInputStream());
int contentLength = getContentLengthFromHeader();    
byte[] b = new byte[contentLength];
int bytesRead = inFromClient.read(b, 0, contentLength);

有时 read() 完成后bytesRead等于contentLength但在其他情况下 read() 似乎没有读到内容的末尾。 有人对正在发生的事情有任何想法吗? Java 是否缓冲输出?有更好的从套接字读取的方法吗?


你假设read()填充缓冲区。检查 Javadoc。它至少传输一个字节,仅此而已。

你不需要一个大的缓冲区和一个BufferedInputStream.将后者更改为DataInputStream.readFully().

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

使用 BufferedInputStream 进行套接字读取 的相关文章

  • 正则表达式奇/偶数

    我有一个正则表达式问题 我不知道该怎么做 它必须匹配开头包含任意数量的 a 的所有字符串 如果 a 的数量为偶数 则匹配单个 0 如果 a 的数量为奇数 则匹配单个 1 如何跟踪偶数 奇数 Sample aaa1 aaaa0 a aa 1
  • 查看登录设备

    我想查看Log在设备上 即System out println 我可以查看DDMS但如何在运行时在设备屏幕上查看APK文件 还有一个适用于 Android 的 Logcat 应用程序 code google com p android ra
  • 如何在 Jboss 7.1 中配置简单身份验证

    我正在从事由以下人员编写的项目纯jsps 脚本 不使用任何框架 jboss版本 jboss as 7 1 0 Final 我现在正在尝试在其上添加简单的身份验证 因此 当用户尝试浏览 jsp 时 比如说 http localhost myC
  • 禁用特定的 ServletContextListener 以防止在 tomcat 上启动

    我的项目正在使用spring boot with webflux tomcat 我有一个内部库类 它是ServletContextListener WebListener public class DevIoServletContextLi
  • Java程序在没有定义main方法的情况下如何运行?

    我正在浏览一些 Java 源代码并注意到main方法未定义 Java如何编译源码却无从下手 The main方法仅在 Java 虚拟机执行代码时使用 没有 a 则无法执行代码main方法 但仍然可以编译 编译代码时 通常在命令行上指定一组文
  • emacs 的最佳 java 工具 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 为什么要分离接口和实现?

    在生产代码中 我经常看到定义如下的类 public interface SomeComponent Some methods public class SomeComponentImpl implements SomeComponent S
  • php中的可变长度数据包

    我正在接收通过 UDP 发送到我的服务器的数据包 我正在使用 socket read 来读取数据 它运行得很好 但是我遇到了一个错误 在我的例子中 socket read 的长度参数并不总是相同的 数据长度的范围可以是 50 150 字节
  • Android 是否可以获取用户和设备所在国家/地区的货币代码?

    是否可以获取用户和设备所在国家 地区的货币代码 我想将用户当前国家 地区的国家 地区代码设置为默认国家 地区 我们在 Android 中有解决方案吗 由于这段代码可能对您有帮助 public class CurrencyTest publi
  • 如何配置jackson属性命名策略?

    此代码不起作用 Configuration public class RepositoryRestMvcConfig extends RepositoryRestMvcConfiguration Bean Override public O
  • 如果Jetty的密钥库中有多个证书,它如何选择?

    我们的系统中有一些代码用于自动将自签名证书生成到密钥库中 然后由 Jetty 使用 如果给定主机的密钥已经存在 那么什么也不会发生 但如果它不存在 我们会生成一个新密钥 如下所示 public void generateKey String
  • 导入数据期间解析日期格式的最佳方法

    我创建了在数据导入 400 K 记录 期间解析视图不同日期格式的方法 我的方法捕获 ParseException 并尝试在不同时使用下一种格式解析日期 问题 在数据导入期间设置正确的日期格式是更好的方法 更快 吗 private stati
  • 如何设置 Eclipse 以停止发生异常的线路?

    如何设置 Eclipse 在发生异常时停止 我有一个 Eclipse 断点设置来在异常时中断 在下面的代码示例中 我遇到的问题是 Eclipse 尝试打开 Integer 源代码 有没有办法让调试器在我的代码示例中显示的位置中断 如果我向下
  • 当从搜索表单动态构建 WHERE 子句时,如何防止 SQL 注入?

    我知道在 Java 中保护 SQL 查询免受 SQL 注入的唯一真正正确的方法是使用准备好的语句 然而 这样的语句要求基本结构 选择的属性 连接的表 WHERE条件的结构 不会改变 我这里有一个 JSP 应用程序 其中包含一个带有大约十几个
  • Java TreeMap时间复杂度-lowerKey

    时间复杂度是多少lowerKey Java实现中的操作TreeMap 我认为它是 log n 但我在文档中找不到它 更基本操作的复杂性已有详细记录 此实现提供了有保证的 log n 时间成本 containsKey 获取 放置和删除操作 顺
  • 如何从java程序中编译.java文件[重复]

    这个问题在这里已经有答案了 可能的重复 从 Java 内部编译外部 java 文件 https stackoverflow com questions 10889186 compiling external java files from
  • 将 XML 转换为 Java 对象 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • GAE、JPA、XG 事务、实体组过多异常

    我知道 GAE 上的 XG 交易有 5 个实体组的限制 但我认为我在一项交易中仅使用 3 个组 商品 类别 商品类别 但仍然遇到此异常 引起原因 java lang IllegalArgumentException 在单个事务中对太多实体组
  • Spring Data 中 IQueryable 的等效项

    我习惯了 Net 和 LINQtoEntities 尤其是 IQueryable 部分 它允许在获取结果之前通过不同的函数传送请求 Spring数据中是否存在类似的东西 或者任何其他 java ORM 我希望能够做的基本示例 private
  • Activity 在 Android 上创建两次

    首先 我是 Android 开发新手 所以请耐心等待 我将从用户界面开始 我有一个按钮 一旦您点击它 就会启动一个活动以获取结果 public class GUIActivity extends Activity Override publ

随机推荐

  • 消息“术语‘ng’未被识别为 cmdlet 的名称”

    今天 在学习一些基本的 AngularJS 介绍时 我遇到了一个问题 我打开 PowerShell 来开始这个项目 新公共管理发挥了作用 我能够使用以下方式安装 Angular npm install g angular cli 每当我尝试
  • 在 Redux 中访问中间件中的状态

    我的 React Redux 应用程序中有一个中间件 如下所示 export const myMiddleware store gt next gt async action gt switch action type case types
  • 为什么不是每种类型的对象都可序列化?

    为什么不是每种类型的对象都是隐式可序列化的 以我有限的理解 对象不就是简单地存储在堆上并将指向它们的指针存储在堆栈上吗 难道您不应该能够以编程方式遍历它们 以通用格式存储它们 并且还能够从那里重建它们吗 某些对象封装了无法访问的资源 例如文
  • param : JSP 中的隐式 EL(表达式语言)对象

    如果我有这样的 URL 怎么办 servlet jsp myparam myvalue 这 2 个 EL 应返回输出 我的价值 但我其实不明白为什么 param values myparam 0 param values myparam 0
  • Osmdroid 离线文件

    我有一个 osmdroid 地图 我想从 MOBAC 的 osmdroid zip 或 gemf 文件加载离线图块 我查看了它 无论我走到哪里 它都说只需将其放入 sdcard osmdroid 中即可 但它不起作用 我需要更改代码中的某些
  • 在 C# 插件中更改业务流程阶段

    我正在关注this https msdn microsoft com en us library dn481586 aspx Server side 20programmability 20support 20for 20business
  • Tyrus WebSockets (Java) - 如何设置客户端本地 IP 地址

    使用 WebSockets Tyrus 时有没有办法指定本地 IP 地址和端口 我正在寻找你可以用完整的 4 个参数构造函数做的同样的事情Socket http docs oracle com javase 6 docs api java
  • 内容变更推送通知

    假设我有一个 Android 应用程序 它仅使用从随机 REST API 获取的内容构建 ListView 想象一下 现在我需要在 API 上有新内容时发送推送通知 最简单的方法是什么 我对 Android 上的推送通知过程有点困惑 我查看
  • Opengl 非同步/非阻塞地图

    我刚刚找到以下内容OpenGL 规范ARB map buffer range http www opengl org registry specs ARB map buffer range txt 我想知道是否可以使用此扩展进行非阻塞地图调
  • 禁用 dexpreopt 构建单独的 Android 模块

    对于我的论文 我正在修改 android 框架并构建源代码 4 1 1 Jelly Bean 我可以进行完整的构建 但因为这非常耗时 我正在 ubuntu 12 04 64 位虚拟机上开发 所以我想构建单独的模块 例如 当对位置模块进行更改
  • jQuery 通过类和属性获取

    嗨 我有一个选择 例如
  • 实体框架 - 包含在子查询中?

    我不确定这个问题是否已经得到解答 我查看了几个问题 但我认为它们并不是我想要的 假设我有 3 张表 Restaurant 1 M MenuCategory 1 M MenuItem 我有一个 L2E 查询 如下所示 Restaurant c
  • arrayAdapter getView 方法内的侦听器

    我有一个用于 ListView 的自定义 row item 其中包含图像 一对 TextView 和一个复选框 据我了解 由于 checkBox 是一个可聚焦元素 它会从 listView 中窃取焦点 因此 OnListItemClicke
  • 将文件路径添加到列表框项目

    我试图将文件路径存储在列表框项目的标签中 我正在使用下面的内容进行搜索并将所需的文件夹名称添加到列表框中 我已经添加了ListBox1 Tag sDir行到第一行上方Next当我单步执行代码时 值sDir似乎保留了路径 但是如果我创建一个简
  • 如何在 swift 中导入自定义框架中存在的类

    我有一个自定义框架 它包含一些公共类 但我无法使用该公共类 在 Objective C 中我们可以导入为 import
  • 带有自定义注释的 JSON 到 POJO

    我试图在从 JSON 生成的 Java 代码中包含 Spring Boot 注释 如下所示 Entity public class Person and Repository public interface PersonRepositor
  • Gem::LoadError:为数据库适配器指定了“postgresql”,但未加载 gem

    帮我 输入 mina deploy 得到这个美图 我的 home deploy inscope shared config database yml 看起来 production adapter postgresql encoding un
  • 当页面上另一个元素的混合混合模式更改时,背景过滤器不起作用

    浏览器版本为Chrome 87 0 4280 88 以下是我无意中发现此错误的方法 页面上有两个独立的div 并且都是position fixed 其中之一具有悬停效果 其mix blend mode被改变了 另一个有玻璃形态风格backd
  • 使 _next 选项在 Formspree 中起作用

    我正在为静态网站制作联系表 网址为www peek solutions http www peek solutions 联系表格有效 因为我 在确认我的电子邮件地址后 能够在给定地址接收电子邮件 这是使用的代码
  • 使用 BufferedInputStream 进行套接字读取

    我正在使用Java的BufferedInputStream类读取发送到套接字的字节 发送到套接字的数据是 HTTP 形式 因此通常是具有定义的内容长度的标头 然后是一些内容 我遇到的问题是有时BufferedInputStream read