【发布时间】:2018-10-14 04:12:59
【问题描述】:
我正在用 Java 制作一个套接字应用程序,它以 ASCII 格式从服务器接收一些 HTML 数据,然后相应地解析数据。
byte[] receivedContent = new byte[12500];
receivedSize = inputStream.read(receivedContent);
receivedContent = Arrays.copyOf(receivedContent, receivedSize+1);
if (receivedSize == -1) {
System.out.println("ERROR! NO DATA RECEIVED");
System.exit(-1);
}
lastReceived = new String(receivedContent, StandardCharsets.US_ASCII);
这应该非常简单,但事实并非如此。我打印了一些调试消息,发现尽管接收到一些字节的数据,(例如 priting receivedSize 告诉我它收到了 784 个字节),这些字节的结果字符串只有几个字符长,如下所示:
Ard</a></li><li><a
我期待一个完整的 HTML 文档,所以这显然是错误的。关于何时会发生这种情况也没有明显的模式。这似乎完全随机。由于我正在为缓冲区分配新内存,因此其中不应该有任何旧数据与来自套接字的新数据相混淆。有人可以对这种奇怪的行为有所了解吗?此外,这似乎在我运行 OracleJDK 的 Windows 机器上发生的频率较低,而不是在运行 OpenJDK 的远程 Ubunut 机器上,这可能是原因吗?我将如何解决这个问题?
更新: 最后,我根据 ASCII 表手动检查了字节数组的 ASCII 编码,发现服务器故意发送乱码数据。谜团解开了。
【问题讨论】:
-
你检查了 receivedSize 的值吗?
-
@kishore 我做到了。我打印了解码后的字符串以及接收到的大小,但发现不一致。