2

我使用一个字节数组来适应 1024 个字节。问题是,在我的代码中的不同时间,我只需要使用其中的一些位。在 C 语言中,我使用了...

byte buff[] = read();
strcmp( buff, "CMD\r\n" );

这将忽略数组中所有后面的字节,只比较前 5 个字节。有没有一种简单的方法可以在 Java 中做到这一点?

4

2 回答 2

5

您可以将字节数组与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");
于 2012-07-27T14:15:11.180 回答
3

好吧,自己写很简单:

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[]- 字节和字符串非常不同,应该区别对待。

于 2012-07-27T14:15:54.040 回答