相当于Java中用于比较字节数组的strcmp()



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

byte buff[] = read();
strcmp( buff, "CMDrn" );

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

您可以将字节数组与Arrays.equals(byte[],byte[])进行比较。

byte[] buff = ...;
boolean isEqual = Arrays.equals( buff, 
                    "CMDrn".getBytes( Charset.forName( "US-ASCII" )));

EDIT:我错过了您的字节数组是1024字节。

一种选择是比较字节数组的切片:

byte[] buff = ...;
final byte[] CMD_BYTES = "CMDrn".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( "CMDrn");

自己编写它很简单:

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

最新更新