gpt4 book ai didi

java - 将对象放入 ChannelBuffer

转载 作者:行者123 更新时间:2023-12-02 00:02:26 25 4
gpt4 key购买 nike

我按照 example http server 使用 Netty 编写了一个小型 http 服务器现在我正在尝试使其适应我的需求(一个应该发送 json 的小应用程序)。我首先使用 jackson 手动将 POJO 编码为 json,然后使用 StringEncoder 获取 ChannelBuffer。现在我尝试通过添加 HttpContentEncoder 来提取将 POJO 编码为 json 的位,从而对其进行稍微概括。我已经或多或少地实现了这一点。

我不明白的部分是如何设置 HttpResponse 上的内容。它需要一个 ChannelBuffer,但我如何将我的对象放入 ChannelBuffer 中?

编辑

假设我有一个具有如下代码的处理程序,并且有一个知道如何序列化 SomeSerializedObject 的 HttpContentEncoder。那么我如何将我的内容(SomeSerializedObject)获取到HttpContentEncoder?这就是我正在寻找的。

SomeSerializableObject obj = ...

// This won't work becuase the HttpMessage expects a ChannelBuffer
HttpRequest res = ...
res.setContent(obj);

Channel ch = ...
ch.write(res);

在进一步研究之后,我不确定这是否是 HttpContentEncoder 的目的,或者更确切地说是做压缩之类的事情?

最佳答案

大多数对象序列化/反序列化库使用InputStreamOutputStream。您可以创建一个动态缓冲区(或用于反序列化的包装缓冲区),用 ChannelBufferOutputStream (或 ChannelBufferInputStream)包装它以提供序列化库。例如:

// Deserialization
HttpMessage m = ...;
ChannelBuffer content = m.getContent();
InputStream in = new ChannelBufferInputStream(content);
Object contentObject = myDeserializer.decode(in);

// Serialization
HttpMessage m = ...;
Object contentObject = ...;
ChannelBuffer content = ChannelBuffers.dynamicBuffer();
OutputStream out = new ChannelBufferOutputStream(content);
mySerializer.encode(contentObject, out);
m.setContent(content);

如果序列化库允许您使用字节数组而不是流,则使用 ChannelBuffer.array()ChannelBuffer.arrayOffset() 可以更简单。

关于java - 将对象放入 ChannelBuffer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14592122/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com