2013-10-11 2 views
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]; 
     } 
    } 
} 

을하지만 때문에 주조의 오버 헤드 그것을 좋아하지 않아 (제거 얻을 수 그게 내가 마지막 바이트를 자르면, 거의 항상 작동 할거야 ...)와 문자열 변환. 해시 맵이나 컬렉션에 중간 메시지가 있는지 확인하는 더 좋은 방법이 있습니까?

답변

0

I 사용할 것이다

대해서 Arrays.hashCode (바이트 [] a)는

관련 문제