0

我有带有 apache-mina 框架的服务器和客户端应用程序。我需要从服务器向客户端发送一个大型数组列表(包含 10000 个自定义对象)。我首先想到使用 GSON 字符串来传递数组列表,但我认为,创建那种巨大的字符串并发送它不是正确的方法。

在我的客户端应用程序中,我编写了一个连接方法:

public void connect() throws InterruptedException 
{

    Thread t = new Thread(new Runnable() 
    {
        @Override
        public void run() 
        {

            connector = new NioSocketConnector();
            connector.getSessionConfig().setReadBufferSize(1024);
            TextLineCodecFactory t = new TextLineCodecFactory(Charset.forName("UTF-8"));
            t.setEncoderMaxLineLength(100000);
            t.setDecoderMaxLineLength(100000);
            connector.getFilterChain().addLast("logger", new LoggingFilter());
            connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(t));

            connector.setHandler(handler);
            ConnectFuture future = connector.connect(new InetSocketAddress("localhost", PORT));
            future.awaitUninterruptibly();

            if (!future.isConnected()) 
            {
                return;
            }

            IoSession session = future.getSession();
            session.getConfig().setUseReadOperation(true);
            session.getCloseFuture().awaitUninterruptibly();

            connector.dispose();
        }
    });
    t.start();
    Thread.sleep(1000);
}

我应该使用什么过滤器来发送对象或容器而不将它们转换为字符串?是关于 BufferedWriteFilter 还是 WriteRequestFilter ?如果是这样,我该如何使用它们?

4

1 回答 1

1

我找到了答案。

通过在客户端和服务器端使用 ObjectSerializationCodecFactory,我可以传递自定义对象和集合。

  ObjectSerializationCodecFactory oscf = new ObjectSerializationCodecFactory();
  oscf.setDecoderMaxObjectSize(1048576);
  connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(oscf)
于 2012-12-06T11:56:07.973 回答