我在从套接字读取数据时遇到一些问题如果套接字流中存在一些空数据,则 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/