繁体   English   中英

将具有ASCII编码的字节数组转换为字符串会产生奇怪的结果

[英]Converting byte array with ASCII encoding to String produces weird result

我正在用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);

这确实应该很简单,但事实并非如此。 我打印了一些调试消息,发现尽管接收到一些字节的数据,(例如,示例接收到的大小告诉我接收到784个字节),但是从这些字节得到的字符串只有几个字符长,如下所示:

Ard</a></li><li><a

我期待一个完整的HTML文档,所以这显然是错误的。 关于何时发生这种情况也没有明显的模式。 看来完全是随机的。 由于我正在为缓冲区分配新的内存,因此实​​际上不应有任何旧数据与套接字中的新数据混淆。 有人可以阐明这种奇怪的行为吗? 同样,在运行OracleJDK的Windows计算机上而不是在运行OpenJDK的远程Ubunut计算机上,这种情况发生的频率降低了,这可能是原因,我该如何解决?

更新:最后,我根据ASCII表手动检查了字节数组的ASCII编码,发现服务器有意发送乱码数据。 谜团已揭开。

而不是使用:

 inputStream.read(receivedContent);

您需要从流中读取所有数据。 使用类似的东西(来自Apache Commons io):

 IOUtils.readFully(inputStream, receivedContent)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM