深入了解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("", 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("".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();}}

这一秒不放弃,下一秒就会有希望。

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

相关文章:

你感兴趣的文章:

标签云: