我使用一个字节数组来适应 1024 个字节。问题是,在我的代码中的不同时间,我只需要使用其中的一些位。在 C 语言中,我使用了...
byte buff[] = read();
strcmp( buff, "CMD\r\n" );
这将忽略数组中所有后面的字节,只比较前 5 个字节。有没有一种简单的方法可以在 Java 中做到这一点?
您可以将字节数组与Arrays.equals(byte[], byte[])进行比较。
byte[] buff = ...;
boolean isEqual = Arrays.equals( buff,
"CMD\r\n".getBytes( Charset.forName( "US-ASCII" )));
编辑:我错过了你的字节数组是 1024 字节。
一种选择是比较字节数组的一部分:
byte[] buff = ...;
final byte[] CMD_BYTES = "CMD\r\n".getBytes( Charset.forName( "US-ASCII" ));
boolean isEqual = Arrays.equals( Arrays.copyOf( buff, CND_BYTES.length()),
CMD_BYTES );
另一种选择是将字节数组转换为字符串,允许使用类似于 C++ 的表达式。
byte[] buff = ...;
int buffLen = ...;
String command = new String( buff, 0, buffLen, Charset.forName("US-ASCII"));
int cmp = command.compareTo( "CMD\r\n");
好吧,自己写很简单:
public static boolean truncatedEquals(byte[] x, byte[] y) {
int upperBound = Math.min(x.length, y.length);
for (int i = 0; i < upperBound; i++) {
if (x[i] != y[i]) {
return false;
}
}
return true;
}
我不相信Java为此内置了任何东西。
请注意,我将输入设为两个byte[]
- 字节和字符串非常不同,应该区别对待。