2017-07-29 18 views
0

は、現在、私はMQTTを介してデータを取得するJava https://github.com/msgpack/msgpack-javaJavaのMessagePackはnullチェック

ためMessagepackと慣れ取得しようとしています。 「変数」はNULLでない場合はすべてが正常であるが、変数はNULLにすることができ、この場合には、私は、この例外は、「INTを期待しますが、無記号(C0)しまった」

MessageUnpacker unpacker = MessagePack.newDefaultUnpacker(m.getPayload()); 
int  einInt   = unpacker.unpackInt(); 
String einString  = unpacker.unpackString(); 

は、これまでのところ、私はなかったでしょうそう現在、私はこのよう

int einInt = unpacker.getNextFormat().equals("NIL") ? unpacker.unpackInt() : null; 

を使用していますバック 私はTRY/CATCHを使用することを避けたいNULLを取得する方法を見つけ出すことができbedderの方法はありますか?

+0

それはむしろいや、逆すべきですか? 'Integer einInt = unpacker.getNextFormat()。equals(" NIL ")? null:unpacker.unpackInt(); '' int'はnull値を受け取ることができません。当然の – davidxxx

+0

あなたは)答え 用ヘッドのTHXアップ:) – Nisbo

答えて

0

私はMessageUnpackerのjavadocを見ましたが、それはより良い方法を提供していないようです。

のサンプルコードでは、あなたの方法の非常に近いです:

MessageUnpacker unpacker = MessagePack.newDefaultUnpacker(...); 
while(unpacker.hasNext()) { 
    MessageFormat f = unpacker.getNextFormat(); 
    switch(f) { 
     case MessageFormat.POSFIXINT: 
     case MessageFormat.INT8: 
     case MessageFormat.UINT8: { 
      int v = unpacker.unpackInt(); 
      break; 
     } 
     case MessageFormat.STRING: { 
      String v = unpacker.unpackString(); 
      break; 
     } 
     // ... 
    } 
} 

は、だから私は、あなたが良いパスにあると思います。
しかし、この検索を何回も繰り返す場合は、その仕事を行うユーティリティメソッドを導入することができます。 unpackInt()ため例えば

public Integer unpackIntOrNull (MessageUnpacker unpacker){ 
    return unpacker.getNextFormat() == MessageFormat.INT8 ? 
      unpacker.unpackInt() : null; 
} 

そして今、それは要素を展開することは非常にストレートです:

Integer einInt = unpackIntOrNull(unpacker); 
Integer einAndereInt = unpackIntOrNull(unpacker); 
... 
+0

Thxをが.toString(ように見え、右ですが 'unpacker.getNextFormat()が必要です。のtoString()。等号( "NIL")' – Nisbo

+0

'MessageFormat' enumクラスではなく、enum値の' toString() '表現と比較するString:' 'NIL" 'を使用しているためです。私はそれを避ける方法を示すために編集しました。これはサンプルコードのようです。 – davidxxx

関連する問題