0
抽象類MidiMessage有3個子類:MetaMessage,ShortMessage,SysexMessage。 我正在收聽MidiDevice,它會發送短消息或sysexmessages。 問題是MidiMessage的哈希碼永遠不會相同。因此,MidiMessages之間唯一的區別是數據字節數組。檢查HashMap是否包含MidiMessage
我目前的解決方案是將字節存儲在一個字符串,然後檢查是否HashMap中包含字符串:
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];
}
}
}
但我不喜歡它,因爲鑄件的開銷(可以擺脫如果我總是切斷最後一個字節;這應該幾乎總是......)和字符串轉換。 那麼,有沒有更好的方法來檢查hashmap或集合是否包含midimessage?