我在比较字符串时有问题。假设我有一个容纳1024位的字符串的缓冲区。如果我用字符串" Hello"填充该缓冲区,则缓冲区将包含" Hello" 剩余的字节量。如果我创建另一个分配的" Hello"字符串,而没有任何预分配的缓冲区。由于这个缓冲区,两者永远不会平等。
byte[] buffer = new byte[1024];
String a = someInputStream.read(buffer); // A will contain "Hello" + rest of bytes.
String b = "Hello"; // Same string but with no buffer
System.out.println(a.equals(b)); // Would print false
有什么办法可以在不考虑缓冲区的情况下比较这两个字符串?
inputstream.read(buffer)返回int而不是字符串。您可以比较如下。
byte[] buffer = new byte[1024];
inputStream.read(buffer); // A will contain "Hello" + rest of bytes.
String b = "Hello"; // Same string but with no buffer
System.out.println(new String(buffer).trim().equals(b));
这很简单:Java中的字符串与C弦不同,而不是由0结束。因此,从缓冲区创建的String
最终将具有1024的长度,并且在末尾有很多0。除此之外,inputStream.read(buffer)
将返回int
,指示实际读取了多少个字节,而不是包含缓冲区的String
。