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バイトであることを見逃しました。
1つのオプションは、バイト配列のスライスを比較することです。
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 );
もう1つのオプションは、バイト配列を文字列に変換して、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に組み込まれているものはないと思います。
入力を2つにしたことに注意してください。byte[]
バイトと文字列は非常に異なるため、異なる方法で処理する必要があります。