抽象类MidiMessage有3个子类:MetaMessage,ShortMessage,SysexMessage。我正在收听 MidiDevice,它可以发送短消息或系统消息。问题是MidiMessage的哈希码永远不会相同。因此,MidiMessages之间的唯一区别是数据字节数组。
我目前的解决方案是将字节存储在字符串中,然后检查哈希映射是否包含该字符串:
public class Test{
private String inputKey="";
private byte[] data;
private int isShortMessage;
//...
private void setInputKey(MidiMessage msg){
inputKey="";
data=msg.getMessage();
if(msg instanceof ShortMessage){
inputKey+= ((ShortMessage) msg).getChannel();
//last byte contains the value. Value isn't needed.
isShortMessage=1;
}
else isShortMessage=0;
for(int i=0; i<msg.getLength()-isShortMessage;i++){
inputKey+= data[i];
}
}
}
但我不喜欢它,因为转换的开销(如果我总是切断最后一个字节,可以摆脱它;这应该几乎总是有效的......(和字符串转换。那么,有没有更好的方法来检查哈希图或集合是否包含中间消息?
我将使用:
Arrays.hashCode(byte[] a(