java mina 推送_深入了解Mina框架中如何传送(消息+附件)实现方法

最近两天被IoBuffer搞的头晕目眩的,故单独写了个类测试。如果要学习mina框架,该博客有助于实现mina中的如何消息+附件的传送。

描述:模拟消息解析。

第一步:构建SmsObject对象

第二步:将对象设置到IoBuffer中;

第三步:从IoBuffer中将对象解析出来(解析结果包含附件);

经测试解析通过,注意代码如下

package com.dmis.mina.dx3;

import java.io.ByteArrayOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.nio.charset.Charset;

import java.nio.charset.CharsetDecoder;

import java.nio.charset.CharsetEncoder;

import java.util.ArrayList;

import java.util.List;

import org.apache.mina.core.buffer.IoBuffer;

/**

* IoBuffer测试

*

* @author jrunner

*/

public class Test03 {

public static void main(String[] args) throws Exception {

System.out.println("第一步:构建SmsObject对象");

List fileInfos = new ArrayList();

FileInfo f = new FileInfo();

File file = new File("c:\\test.txt");

f.setContent(file);

f.setFileName(file.getName());

f.setFileNameLength(f.getFileName().length());

f.setContentLength((int) file.length());

fileInfos.add(f);

f = new FileInfo();

file = new File("c:\\FeiQ.exe");

f.setContent(file);

f.setFileName(file.getName());

f.setFileNameLength(f.getFileName().length());

f.setContentLength((int) file.length());

fileInfos.add(f);

SmsObject sms = new SmsObject();

sms.setSender("158010122x");

sms.setReceiver("188696999x");

sms.setMessage("你好啊!");

sms.setFileInfos(fileInfos);

System.out.println("=========================================================");

System.out.println("第二步:将对象设置到IoBuffer中");

Charset cs = Charset.forName("UTF-8");

CharsetDecoder cd = cs.newDecoder();

CharsetEncoder ce = cs.newEncoder();

IoBuffer buffer = IoBuffer.allocate(100).setAutoExpand(true);

buffer.putString("http://jrunner.blog.51cto.com", ce);// 状态

buffer.putString(sms.getSender(), ce);// 发送者

buffer.putString(sms.getReceiver(), ce);// 接受者

buffer.putString(sms.getMessage(), ce);// 内容

buffer.putLong(89898989989898L);

for (int i = 0; i < sms.getFileInfos().size(); i++) {

FileInfo info = sms.getFileInfos().get(i);

buffer.putInt(info.getFileNameLength());// 设置文件名长度

buffer.putInt(info.getContentLength());// 设置文件大小

buffer.putString(info.getFileName(), ce);// 设置文件名

buffer.put(inputStreamToByte(new FileInputStream(info.getContent())));// 设置文件内容

}

System.out.println("第三步:从IoBuffer中将对象解析出来");

buffer.flip();

System.out.println(buffer.limit());

System.out.println(buffer.getString("http://jrunner.blog.51cto.com".getBytes().length+sms.getSender().getBytes().length+sms.getReceiver().getBytes().length+ sms.getMessage().length() * 3, cd));

System.out.println(buffer.getLong());

System.out.println("------------------");

for (int i = 0; i < sms.getFileInfos().size(); i++) {

System.out.println("解析文件中...");

int L1 = buffer.getInt();// 文件名称长度

System.out.println("File Name Length:" + L1);

int L2 = buffer.getInt();// 文件内容长度

System.out.println("File Content Length:" + L2);

String fileName = buffer.getString(L1, cd);

System.out.println("FileName:" + fileName);

byte[] data = new byte[L2];

int k = 0;

while (buffer.hasRemaining()) {

data[k] = buffer.get();

k++;

if (k == L2) {

k = 0;

break;

}

}

File fs = new File("d:\\002_" + fileName);

OutputStream out = new FileOutputStream(fs);

out.write(data);

out.flush();

out.close();

}

}

public static byte[] inputStreamToByte(InputStream inStream) throws IOException {

ByteArrayOutputStream swapStream = new ByteArrayOutputStream();

int rc;

while ((rc = inStream.read()) != -1) {

swapStream.write(rc);

}

byte[] in2b = swapStream.toByteArray();

return in2b;

}

}

======================================================

public class FileInfo {

private File content;

private String fileName;

private int contentLength;

private int fileNameLength;

}

public class SmsObject {

private String sender;// 短信发送者

private String receiver;// 短信接受者

private String message;// 短信内容

private List fileInfos;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值