【发布时间】:2019-04-10 15:51:07
【问题描述】:
我的 Java 应用程序有一个字节压缩的 String 对象,该对象是从通过外部连接接收到的远程数据组装而成的。字符串被组装,如下所示:
byte[] buffer = new byte[20];
/* ... buffer is loaded ... */
int j = 9;
String strVal = "";
for( i=0; i<8; i++ )
{
strVal += (char)buffer[j++];
}
strVal += '\0';
稍后,我需要验证接收到的数据,但是当我尝试以下操作时,它返回 false。缓冲区中的数据和strVal 的内容(至少我可以在调试器中查看)都是我所期望的。有什么想法吗?
return strVal.equals("STR GOOD"); // evaluates as false when should be true
【问题讨论】:
-
你有没有试过做一个简单的 System.out.println(strVal);只是为了查看 strVal 中存储的内容。顺便说一句,你为什么要这样做 strVal += '\0';在java中?我认为你不需要在java中将它取出来看看它是否解决了问题。
-
为什么要在 strVal 后面附加一个 '\0'?
-
为什么在循环中使用 j 作为 buffer[] 的索引?不应该是我吗?
-
我认为他使用 j 是因为他不想要完整的单词他只想要位置 9 和 17 之间的单词 store。
-
“字节压缩”是什么意思?您的代码似乎暗示这些字节只是 ASCII 字节,它并不是真正“打包”的,只是用单字节字符集编码,所以使用
new String(buffer, 9, 8, StandardCharsets.US_ASCII)将从索引 9 开始的 8 个字节转换为字符串。