[英]Java MessagePack null check
我试图熟悉Messagepack for Java 。
我通过Mqtt获取数据。 如果变量不为null
一切都很好,但变量也可以为null
,在这种情况下,我将收到以下异常: Expected Int, but got Nil (c0)
MessageUnpacker unpacker = MessagePack.newDefaultUnpacker(m.getPayload());
int someInt = unpacker.unpackInt();
String someString = unpacker.unpackString();
到目前为止,我还无法弄清楚如何获取NULL
我想避免使用TRY / CATCH,所以目前我正在使用这种方式
int someInt = unpacker.getNextFormat().equals("NIL") ? unpacker.unpackInt() : null;
有没有更好的办法 ?
我看了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);
...
MessageUnpacker
有一个名为tryUnpackNil
的方法。 如果下一个字节为nil值,则此方法读取它并返回true
,否则不读取任何内容并返回false
。
这可以用于跳过nil值,并使用以下命令解压缩非nil值:
final MessageUnpacker unpacker = MessagePack.newDefaultUnpacker(data);
final Integer value = unpacker.tryUnpackNil() ? null : unpacker.unpackInt();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.