我有带有apache-mina框架的服务器和客户端应用程序。我需要从服务器向客户端发送一个大的数组列表(包含10000个自定义对象)。我最初的想法是使用GSON字符串来传递arraylist,但是我认为,创建这么大的字符串并发送它并不是一种正确的方式。
在我的客户端应用程序中,我编写了一个连接方法:
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?如果是这样,我该如何使用它们?
发布于 2012-12-06 19:56:08
我找到了答案。
通过在客户端和服务器端使用ObjectSerializationCodecFactory,我可以传递自定义对象和集合。
ObjectSerializationCodecFactory oscf = new ObjectSerializationCodecFactory();
oscf.setDecoderMaxObjectSize(1048576);
connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(oscf)https://stackoverflow.com/questions/13730969
复制相似问题