java - 从Socket读取数据的问题

标签 java android

我在从套接字读取数据时遇到一些问题如果套接字流中存在一些空数据,则 DataInputStream 将无法读取完整数据,因此在接收端解析数据时出现异常。 从套接字读取数据以便随时不丢失数据的正确方法是什么? 提前致谢。

最佳答案

您应该发布用于从套接字读取的代码,但对我来说最有可能的情况是读取代码错误地将 0 字节解释为流的末尾,类似于此代码

InputStream is = ...;
int val = is.read();
while (0 != (val = is.read()) {
  // do something
}

但是流结束指示器实际上是-1

InputStream is = ...;
int val = is.read();
while (-1 != (val = is.read()) {
  // do something
}

编辑:回应您对使用 isavailable() 的评论。我假设您的意思是 available() 因为 isavailable() InputStream 上没有方法。如果您使用 available 来检测流的结尾,那也是错误的。该函数仅告诉您可以在不阻塞的情况下读取多少字节(即当前缓冲区中有多少字节),而不是流中剩余多少字节。

关于java - 从Socket读取数据的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1653491/

相关文章:

java - Android OPenGL+ XML 集成

java - smbj:我怎样才能只获取子目录?

java - Android 找不到适合 HeaderItem(int,String,<null>) 的构造函数

java - 获取 FileNotFoundException 即使文件存在并且拼写正确

java - 使用 System.loadLibrary 加载 Python C 扩展 DLL

android - 如何将颜色保存到 SharedPreferences Android

android - 安卓语音识别

android - 使用 MDC 在 android 中创建 Material 微调器下拉列表

java - Spring security - 从自定义登录页面调用自定义身份验证提供程序

java - 如何从带注释的 java 类编写/生成 CSV 文件