怎样使用Java网络通讯框架Mina自定义消息格式( 二 )

import java.awt.image.BufferedImage;public class ImageListener {\tpublic void onImages(BufferedImage image1, BufferedImage image2) {\t\tSystem.out.println(String.format("onImages@image1.getimage1.getHeight(),\t\t\t\timage1.getWidth()));\t\tSystem.out.println(String.format("onImages@image2.getHeight=%d|image2.getWidth=%d", image2.getHeight(),\t\t\t\timage2.getWidth()));\t}}public class ImageRequest {\tprivate int width;\tprivate int height;\tprivate int numberOfCharacters;\tpublic ImageRequest(int width, int height, int numberOfCharacters) {\t\tthis.width = width;\t\tthis.height = height;\t\tthis.numberOfCharacters = numberOfCharacters;\t}\tpublic int getWidth() {\t\treturn width;\t}\tpublic int getHeight() {\t\treturn height;\t}\tpublic int getNumberOfCharacters() {\t\treturn numberOfCharacters;\t}}import org.apache.mina.core.buffer.IoBuffer;import org.apache.mina.core.session.IoSession;import org.apache.mina.filter.codec.CumulativeProtocolDecoder;import org.apache.mina.filter.codec.ProtocolDecoderOutput;public class ImageRequestDecoder extends CumulativeProtocolDecoder {\tprotected boolean doDecode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception {\t\tif (in.remaining() \u0026gt;= 12) {\t\t\tint width = in.getInt();\t\t\tint height = in.getInt();\t\t\tint numberOfCharachters = in.getInt();\t\t\tImageRequest request = new ImageRequest(width, height, numberOfCharachters);\t\t\t\t\t\tSystem.out.println(String.format("doDecode@width=%d|height=%d|numer_of_characters=%d", width,\t\t\t\t\theight, numberOfCharachters));\t\t\t\t\t\tout.write(request);\t\t\treturn true;\t\t} else {\t\t\treturn false;\t\t}\t}}import org.apache.mina.core.buffer.IoBuffer;import org.apache.mina.core.session.IoSession;import org.apache.mina.filter.codec.ProtocolEncoder;import org.apache.mina.filter.codec.ProtocolEncoderOutput;public class ImageRequestEncoder implements ProtocolEncoder {\tpublic void encode(IoSession session, Object message, ProtocolEncoderOutput out) throws Exception {\t\tImageRequest request = (ImageRequest) message;\t\tIoBuffer buffer = IoBuffer.allocate(12, false);\t\tbuffer.putInt(request.getWidth());\t\tbuffer.putInt(request.getHeight());\t\tbuffer.putInt(request.getNumberOfCharacters());\t\tSystem.out.println(String.format(\t\t\t\t"encode@request_width=%d|request_height=%drequest_|numer_of_characters=%d", request\t\t\t\t\t\t.getWidth(), request.getHeight(), request.getNumberOfCharacters()));\t\tbuffer.flip();\t\tout.write(buffer);\t}\tpublic void dispose(IoSession session) throws Exception {\t\t// nothing to dispose\t}}import java.awt.image.BufferedImage;public class ImageResponse {\tprivate BufferedImage image1;\tprivate BufferedImage image2;\tpublic ImageResponse(BufferedImage image1, BufferedImage image2) {\t\tthis.image1 = image1;\t\tthis.image2 = image2;\t}\tpublic BufferedImage getImage1() {\t\treturn image1;\t}\tpublic BufferedImage getImage2() {\t\treturn image2;\t}}


推荐阅读