Mina2.0的上传文件时如何实现的 请各位大侠指导下

发布于 2021-11-09 21:34:58 字数 425 浏览 818 评论 7

譬如我A主机要传输一个 teacher.rmvb文件 去 B主机 B是服务端请问这个代码如何能写呢 谢谢各位大侠了

我的邮箱qyhdt@sina.com

还有就是在传输对象过程中 我设定了

factory.setDecoderMaxLineLength(Integer.MAX_VALUE);

factory.setEncodeMaxLineLength(Integer.MAX_VALUE);

有时候还是报异常 bufferdateexception 这个事怎么回事呢

谢谢各位阅读了 最近弄这个弄的好辛苦啊

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

你曾走过我的故事 2021-11-16 04:00:29

请看这个例子:

mina的 StreamIoHandler

文章分类:Java编程

        最近看上了mina,其性能多多,完全不用说了。。,本来是想搞个file+msg传输的,结果。。被这个handler给 block 了,不知道这个东西扎用。。。按其Iohandler interface implement methods+ processStreamIo abstract method   写了一个sample,发现死活发不了包。。。哥怒了。

        没办法,开源的东西还是有好处地,可以深入,下了源码,发现其结构真的很不错,IoService(类似与和customer communication 的一个接口: session )<==IoProcessor(这个好象在code business 的时候没看到,后来才知道是用于处理IoFilter 的)<===IoFilter(*) ,IoHandler(business handler) 。

       原来,StreamIoHandler 的 里面wrap 了两个内部out,in,并且对IoHandler 的每个method 都做了实现,迷底马上揭晓了。。。see the blew:

Java代码

  1. @Override  
  2. public void sessionOpened(IoSession session) {  
  3.     // Set timeouts  
  4.     session.getConfig().setWriteTimeout(writeTimeout);  
  5.     session.getConfig().setIdleTime(IdleStatus.READER_IDLE, readTimeout);  
  6.   
  7.     // Create streams  
  8.     InputStream in = new IoSessionInputStream();  
  9.     OutputStream out = new IoSessionOutputStream(session);  
  10.     session.setAttribute(KEY_IN, in);  
  11.     session.setAttribute(KEY_OUT, out);  
  12.     processStreamIo(session, in, out);  
  13. }  
    @Override
    public void sessionOpened(IoSession session) {
        // Set timeouts
        session.getConfig().setWriteTimeout(writeTimeout);
        session.getConfig().setIdleTime(IdleStatus.READER_IDLE, readTimeout);

        // Create streams
        InputStream in = new IoSessionInputStream();
        OutputStream out = new IoSessionOutputStream(session);
        session.setAttribute(KEY_IN, in);
        session.setAttribute(KEY_OUT, out);
        processStreamIo(session, in, out);
    }

划克,把processStreamIo  template  method 了。。(PS:曾经偶在写portal 里用到过这种pattern)

然后其他的iohandler 的method 里面也全写满了io   logic....最后session closed 才把in ,out stream close .

我想,这样一来应该每传一个文件就回connect 一次了。。

费话说完了。。code ==>

Java代码

千笙结 2021-11-16 03:22:27

我已经解决了 谢谢大家

一笔一画续写前缘 2021-11-16 01:54:31

引用来自“王全”的帖子

引用来自“qyhdt”的帖子

引用来自“王全”的帖子

可以使用StreamIoHandler,这个handler主要是支持stream的.

直接实现它的processStreamIo method

客户端使用IoSessionOutputStream write,

服务端使用IoSessionInputStream read!

和本地的io流读写大同小异!

柠檬 2021-11-15 22:10:05

引用来自“qyhdt”的帖子

引用来自“王全”的帖子

可以使用StreamIoHandler,这个handler主要是支持stream的.

直接实现它的processStreamIo method

客户端使用IoSessionOutputStream write,

服务端使用IoSessionInputStream read!

和本地的io流读写大同小异!

悸初 2021-11-15 20:26:02

引用来自“王全”的帖子

可以使用StreamIoHandler,这个handler主要是支持stream的.

直接实现它的processStreamIo method

客户端使用IoSessionOutputStream write,

服务端使用IoSessionInputStream read!

和本地的io流读写大同小异!

噩梦成真你也成魔 2021-11-15 08:52:03

可以使用StreamIoHandler,这个handler主要是支持stream的.

直接实现它的processStreamIo method

客户端使用IoSessionOutputStream write,

服务端使用IoSessionInputStream read!

和本地的io流读写大同小异!

把昨日还给我 2021-11-15 06:55:43

public class RmvbHandler implements IoHandler{

public void messageReceived(IoSession session, Object message)
   throws Exception {

//不里不停的接收message,把他加到一个流中,再把这个流放到session,下次写时就拿这个流出来,再把数椐写进去

//一直到调用sessionClosed就把流拿出来,这样就成了

}

}

如果你一个socket要发送多个文件,那么就必需要解释rmvb文件格式了,起码得知道文件大小

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文