0
추상 클래스 MidiMessage에는 MetaMessage, ShortMessage, SysexMessage의 세 가지 하위 클래스가 있습니다. 나는 짧은 메시지 나 sysex 메시지를 보내는 MidiDevice를 듣고 있습니다. MidiMessage의 해시 코드가 결코 같지 않다는 점이 문제입니다. 따라서 MidiMessages 간의 유일한 차이점은 데이터 바이트 배열입니다. 해시 맵 문자열이 포함 된 경우HashMap에 MidiMessage가 포함되어 있는지 확인합니다.
나의 현재 솔루션은 문자열의 바이트를 저장하고 확인하는 것입니다 :
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];
}
}
}
을하지만 때문에 주조의 오버 헤드 그것을 좋아하지 않아 (제거 얻을 수 그게 내가 마지막 바이트를 자르면, 거의 항상 작동 할거야 ...)와 문자열 변환. 해시 맵이나 컬렉션에 중간 메시지가 있는지 확인하는 더 좋은 방법이 있습니까?