Mina 使用ProtoBuffer 序列化出了点问题。有高手请进。万急....

Dongo2 2013-06-03 11:03:34
public class MinaClientHanlder extends IoHandlerAdapter {
public void sessionOpened(IoSession session) throws Exception {
System.out.println("sessionOpened");
OpRequest.Builder builder = OpRequest.newBuilder();
builder.setMsg("1111111");
OpRequest request = builder.build();
byte[]data = request.toByteArray();
ByteBuffer buffer = ByteBuffer.wrap(data);
session.write(getObject(buffer));
}
public Object getObject(ByteBuffer byteBuffer) throws IOException, ClassNotFoundException
{
IoBuffer buffer = IoBuffer.allocate(byteBuffer.capacity()).setAutoExpand(true);
for(int i=0; i<byteBuffer.capacity();i++)
{
byteBuffer.position(i);
buffer.put(byteBuffer.get());
}
buffer.position(0);
InputStream input = buffer.asInputStream();
ObjectInputStream oi = new ObjectInputStream(input);
Object obj = oi.readObject();
input.close();
oi.close();
return obj;
}


连接后会出现exceptionCaught invalid stream header: 12073131
胜是不解啊,求大神们帮帮忙。或者有这方面经验的朋友可以说一下你们是怎么处理的。谢谢
...全文
291 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dongo2 2013-06-11
  • 打赏
  • 举报
回复
引用 5 楼 pdw_jsp 的回复:
没太明白是怎么回事! 能代码帮忙写一下你说的意思吗?灰常感谢
这是使用了Protobuffer 进行序列化的对象,在发送之前需要编码,然后发送对象。你说的那个只适用于同种语言的服务器和客户端。不知道我这样理解有咩有问题
冰思雨 2013-06-07
  • 打赏
  • 举报
回复
看楼主给出的代码,真是一种折磨。 根本搞不太清楚,这些代码要干一件什么事情。 逻辑上,有些冲突的东西。 1.首先,这个程序,是一个客户端程序。 2.其次,当客户端建立连接后,会向服务端发送一个请求包过去。 问题,就在这个发送代码当中。 众所周知,一个消息的发送操作,会依次经历 消息对象的生成、赋值、编码转换、数据发送 这几个阶段。 楼主代码中,先构建了一个工厂对象,向里面设置的内容,之后,调用方法生成请求对象。 接下来是 编码转换(对象向二进制数据的转换过程)过程,在这个过程之后,就应该是发送。 但是,楼主的代码,就将二进制数据转换成了对象进行发送,这个过程,我很是费解。 一般情况下,只有接受数据的时候,才需要解码(二进制数据向对象的转换)过程的。
Dongo2 2013-06-06
  • 打赏
  • 举报
回复
没太明白是怎么回事! 能代码帮忙写一下你说的意思吗?灰常感谢
Dongo2 2013-06-05
  • 打赏
  • 举报
回复
我不是都将ObjectInputStream关闭了吗?而且每次都是新创建的啊。怎么会是每次都冲那个流读 ?
  • 打赏
  • 举报
回复
ObjectInputStream 这个是对象输入流,只能写一个,你虽然关闭了,还是没用的。如果想写入多个对象,又都读出来,看看这个链接吧http://blog.csdn.net/zhouhuozhi/article/details/4156357
l_9style 2013-06-04
  • 打赏
  • 举报
回复
写数据应该用ObjectOutputStream
  • 打赏
  • 举报
回复
InputStream input = buffer.asInputStream(); ObjectInputStream oi = new ObjectInputStream(input); Object obj = oi.readObject(); 问题应该是在这三句上,每次读都是从ObjectInputStream这个流内读,肯定会出现问题,这句应该写在服务器端。 Your "server read method" is only reading one object. If it is called multiple times, you will get an error since it is trying to open several object streams from the same input stream. This will not work, since all objects were written to the same object stream on the client side, so you have to mirror this arrangement on the server side. That is, use one object input stream and read multiple objects from that. (The error you get is because the objectOutputStream writes a header, which is expected by objectIutputStream. As you are not writing multiple streams, but simply multiple objects, then the next objectInputStream created on the socket input fails to find a second header, and throws an exception.) To fix it, create the objectInputStream when you accept the socket connection. Pass this objectInputStream to your server read method and read Object from that.
源码直接下载地址: https://pan.quark.cn/s/a4b39357ea24 SSD1306是一种常用于微控制器的OLED(有机发光二极管)显示驱动集成电路。该集成电路被设计用来驱动单色或双色的图形显示,通常被应用在小型电子设备的显示屏上,包括诸如智能手表、家庭智能设备以及嵌入式系统等设备。接下来,我们将详细分析SSD1306的核心特性、运作机制以及在实际项目中的具体应用方法。 1. SSD1306简介: SSD1306是一款具备低能耗、高效率的OLED驱动管理芯片,支持I2C和SPI通信方式,能够驱动64x48像素的OLED显示屏。它集成了电压变换装置,可以直接使用3.3V或5V的电源供电,从而优化了电源管理设计。 2. SSD1306硬件特征: - 内置电荷泵:为OLED单元提供超VCC的电压,确保屏幕的明亮度。 - 存储器映射:64行x48列的显示存储空间,用于保存显示数据。 - 数据串行处理:内部电路将并行数据转换为串行数据,以驱动OLED单元。 - 多种接口支持:兼容I2C(双线接口)和SPI(四线串行接口),便于与微控制器相连。 - 显示管理:具备垂直滚动控制、开关功能、对比度调节等操作。 3. SSD1306运作机制: OLED屏幕由众多自发光的像素组成,每个像素由红、绿、蓝三色OLED单元构成。SSD1306通过控制每个像素的电流大小来调节亮度,从而实现图像的展示。通过I2C或SPI接口,微控制器向SSD1306传输指令和数据,用以设定显示内容及其参数。 4. SSD1306应用步骤: a. 连接线路:将微控制器的I2C或SPI引脚与SSD1306对应的引脚相连接。 b. 初始化设置:发送初始化指令序列,设定屏幕分辨率、通信接口...
内容概要:本文档标题虽为《基于蚁群优化算法的直流电机模糊PID控制(Matlab实现)》,但实际内容是一篇关于“SEM广告投放策略优化”的完整研究论文。该论文基于某互联网公司2025年全年约142万元的SEM投放数据,构建了“诊断—分类—优化—鲁棒决策”四层次量化分析框架。首先从广告设计、关键词管理、价预算与投放时间四个维度评估投放合理性,并建立对数线性假日效应回归模型,揭示工作日效益高、节假日效应显著等时间规律;其次提成本—效益二维归一化分类框架,结合中位数分割与K-means聚类校验,将6000余个关键词划分为黄金词、重词、潜力词、问题词和无效词五类;接着建立以预期注册量最大化为目标、受日预算与总预算双重约束的0-1整数规划模型,采用贪心选词与拉格朗日对偶定价相结合的两阶段算法求解,得2025年特定周期的最优投放策略;最后引入CVaR鲁棒优化框架,应对竞价、展现、击与转化的多重不确定性,给2026年特定周期的稳健投放方案及指标期望范围。实证结果显示,优化后单位注册成本下降约20%,黄金词预算占比提升至四成以上,无效词被完全剔除,整体投放结构显著改善。; 适合人群:具备数据分析、运筹优化或数字营销背景,从事互联网广告投放、商业分析、数据科学等相关工作的从业者及高校研究生。; 使用场景及目标:① 学习如何系统性地诊断与优化大规模SEM广告投放策略;② 掌握关键词分类、预算分配、鲁棒优化等核心建模方法;③ 为实际业务中提升广告投放ROI(投资回报率)提供可复用的量化分析框架与算法参考。; 阅读建议:本文兼具理论深度与实践价值,建议读者结合文中提到的三张数据表单(投放记录、注册数、关键词统计)和结果模板,复现其分析流程与模型推导,重关注分类规则的设计、两阶段算法的实现细节以及CVaR鲁棒框架的应用逻辑,以便将方法迁移到自身的业务场景中。

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧