有人试图使用MessagePackAndroid应用吗?
可能吗?我试图使用Jar msgpack-java并收到以下异常:
Caused by: java.lang.ExceptionInInitializerError
at org.msgpack.Packer.pack(Packer.java:532)
at org.msgpack.MessagePack.pack(MessagePack.java:31)
... 15 more
Caused by: java.lang.ExceptionInInitializerError
at org.msgpack.template.TemplateRegistry.<clinit>(TemplateRegistry.java:38)
... 17 more
Caused by: java.lang.VerifyError: org.msgpack.template.BeansFieldEntryReader
at org.msgpack.template.builder.BeansTemplateBuilder.<init (BeansTemplateBuilder.java:42)
at org.msgpack.template.builder.BuilderSelectorRegistry.initForJava(BuilderSelectorRegistry.java:73)
at org.msgpack.template.builder.BuilderSelectorRegistry.<clinit>(BuilderSelectorRegistry.java:38)
... 18 more
Run Code Online (Sandbox Code Playgroud)
我使用的代码非常简单
PrintWriter out = new PrintWriter(socket.getOutputStream());
Message msg = new Message();
msg.body = "asdasdasd";
msg.from = "qwe";
msg.to = "ttt";
byte[] bytes = MessagePack.pack(msg);
out.print(bytes);
out.flush();
Run Code Online (Sandbox Code Playgroud)
我有javassist.jar,msgpack-0.5.2.jar,slf4j-api-1.6.2.jar和slf4j-jdk14-1.6.2.jar在我的lib目录中.
在我的服务器应用程序中,此代码可以使用相同的库.
我正在使用C++ msgpack实现.关于如何打包二进制数据,我遇到了障碍.在二进制数据方面,我有一个以下类型的缓冲区:
unsigned char* data;
Run Code Online (Sandbox Code Playgroud)
的数据变量指向的数组,其实际上是一个图像.我想要做的是使用msgpack打包.似乎没有关于如何实际打包二进制数据的示例.从格式规范支持原始字节,但我不知道如何使用该功能.
我尝试使用如下字符指针的向量:
msgpack::sbuffer temp_sbuffer;
std::vector<char*> vec;
msgpack::pack(temp_sbuffer, vec);
Run Code Online (Sandbox Code Playgroud)
但这会导致编译器错误,因为T = std :: vector没有函数模板.
我还试过以下几点:
msgpack::pack(temp_sbuffer, "Hello");
Run Code Online (Sandbox Code Playgroud)
但这也会导致编译错误(即没有T = const char的函数模板[6]
因此,我希望有人能就如何使用msgpack C++打包表示为char数组的二进制数据给出建议.
我在MsgPack C头文件中看到了对"zone"的引用,但是找不到它是什么或它的用途的文档.它是什么?此外,C API的功能文档在哪里?
我目前正在尝试在用C编写的项目中使用msgpack.我正在使用msgpack来序列化结构的内容,然后通过网络发送,然后反序列化为相应的结构.另一边.
我正在尝试做的简明版本:
#include <stdio.h>
#include <msgpack.h>
#include <stdbool.h>
typedef someStruct{
uint32_t a;
uint32_t b;
float c;
} someStruct;
int main (void){
someStruct data;
/* ... Fill 'data' with some data for test purposes ...*/
msgpack_sbuffer* buff = msgpack_sbuffer_new();
msgpack_packer* pck = msgpack_packer_new(buff, msgpack_sbuffer_write);
someStruct* structs = malloc(sizeof(someStruct) * 10);
/* ... Fill 'structs' with members containing test data ... */
// Serialize
msgpack_pack_array (pck, 10);
int i;
for(i = 0 ; i < 10 ; i++){
msgpack_pack_array (pck, 3);
msgpack_pack_uint32 …Run Code Online (Sandbox Code Playgroud) 我一直在寻找,但似乎找不到任何东西。不确定是否有人知道MsgPack在选项卡中查看请求和响应的简单方法network?
我正在尝试使用 MessagePack 来序列化具有接口类型属性的对象。当我调用时Pack,它抛出SerializationException说没有为接口定义序列化程序。
代码示例:
namespace ConsoleApplication1
{
// interfaces and classes declaration
public interface IDummyInterface { }
public class DummyObject : IDummyInterface
{
public string Value { get; set; }
}
public class SmartObject
{
public string Name { get; set; }
IDummyInterface DummyOne { get; set; }
}
// in main
var mySmartObject = new SmartObject() { Name = "Yosy", DummyOne = new DummyObject() { Value = "Value"} };
using(var stream = new MemoryStream())
{ …Run Code Online (Sandbox Code Playgroud) 我正在从服务器向Android发送/接收自定义类,该类为;
import org.msgpack.value.Value;
public class myClass {
public String status;
public Value data;
}
Run Code Online (Sandbox Code Playgroud)
问题是我总是得到错误;
com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of org.msgpack.value.Value, problem: abstract types either need to be mapped to concrete types, have custom deserializer, or be instantiated with additional type information
at [Source: java.io.BufferedInputStream@f478759; line: -1, column: 100] (through reference chain:xxx.xxxxxxxxxx.xxx.xxxxxx.myClass["data"]
Run Code Online (Sandbox Code Playgroud)
如果我改变变量"data" MAP<String, String> data然后它工作正常,但数据是未知类型!(通常HashMap或数组可能是String,而不是其他类).
MessagePackFactory factory = new MessagePackFactory();
ObjectMapper mapper = new ObjectMapper(factory);
myClass response = mapper.readValue(inputStream, myClass.class);
Run Code Online (Sandbox Code Playgroud)
如何指定未知类型?
我们有一个通过WS与后端通信的应用程序.我们用msgpack-lite编码所有消息,库规范说它支持IE10.在所有现代浏览器中,如Chrome,Firefox,Safari和Edge都运行良好.但在IE10中我们遇到了一个奇怪的情况:
msgpack-lite将消息编码为与其他浏览器相同的二进制文件但是在将编码消息发送到后端后,此二进制消息会发生变化.
例.
我们想要编码并发送到后端的消息:
{
"method": "subscribe",
"data": {
"sports": [
85
]
}
}
Run Code Online (Sandbox Code Playgroud)
编码消息(后端还处理从IE10以外的所有浏览器发送的相同数据):
[130 166 109 101 116 104 111 100 169 115 117 98 115 99 114 105 98 101 164 100 97 116 97 129 166 115 112 111 114 116 115 145 85]
Run Code Online (Sandbox Code Playgroud)
处理从IE10发送的消息:
[239 191 189 239 191 189 109 101 116 104 111 100 239 191 189 115 117 98 115 99 114 105 98 101 239 191 …Run Code Online (Sandbox Code Playgroud) 为什么会在python3中发生这种情况?
1)我从redis获取msgpack数据
2)我打开我得到以下
3)返回的类型是一个字典:
meta = msgpack.unpackb(data[1])
print(type(meta))
<class 'dict'>
meta = {b'api_key': b'apikey1',
b'sensor_id': b'sid1',
b'version': b'1.0'}
Run Code Online (Sandbox Code Playgroud)
如果我运行以下命令:sensor_meta['sensor_id']
{b'api_key': b'apikey1',
b'sensor_id': b'sid1',
b'version': b'1.0'}
Traceback (most recent call last):
File "/Users//worker.py", line 247, in <module>
print(meta['sensor_id'])
KeyError: 'sensor_id'
Run Code Online (Sandbox Code Playgroud)
但是如果我使用 sensor_meta[b'sensor_id'] 那么它就可以了。
什么是“b”,我怎样才能摆脱它?如何转换整个对象以便没有 b ?
所以如果我执行以下操作:
print(type(meta['sensor_id']))
<class 'bytes'>
Run Code Online (Sandbox Code Playgroud)
为什么是字节以及它是如何到达那里的?每次我想在散列中使用键时,我都不会附加 ab。
谢谢
msgpack ×10
android ×2
c ×2
c# ×1
c++ ×1
class ×1
jackson ×1
java ×1
javascript ×1
json ×1
messagepack ×1
python-3.x ×1
thrift ×1
types ×1
websocket ×1