IoBuffer是MINA框架自己的用于替代ByteBuffer的一个类,MINA不直接使用ByteBuffer的原因有两个:
1.ByteBuffer没有一些有用的getter和putter方法比如get/putString
2.ByteBuffer的长度是固定的所以很难存储变长的数据
IoBuffer提供一个新的wrap方法可以直接包裹ByteBuffer或则byte[]来得到IoBuffer对象
AutoExpand:setAutoExpand(true)之后,容量不够时IoBuffer对象会自动扩展它的limit和capacity值
AutoShrink:如果autoShrink为true,当调用compact方法且小于或等于四分之一的capacity空间被使用则,capacity减半,或则可以直接调用shrink()方法。但是如果新的capacity将会小于minimumCapacity那就不生效
不管是expand还是shrink都是通过生成一个新的底层ByteBuffer实现的
Derived Buffer:衍生Buffer可以通过duplicate()、slice()、asReadOnlyBuffer()等方法得到,一般都用于在多个IoSession共享相同消息。有一点要注意,这些衍生buffer都是不能expand或shrink的
相关推荐
- Mina(Java In Action):一个基于NIO的轻量级网络通信框架,主要用于开发高性能、高可用性的网络应用。 - 特点:事件驱动、异步模型,简化了网络编程。 - 应用场景:如FTP服务器、聊天软件、游戏服务器等。 4...
public Object decode(IoBuffer in) throws Exception { int length = in.getInt(); if (in.getRemaining() ) { // 没有足够的数据,等待更多数据到达 return null; } byte[] data = new byte[length]; in....
例如,如果你有一个自定义的消息类`MyMessage`,你可以创建一个`MyMessageEncoder`,重写`encode()`方法,将`MyMessage`对象转换为`IoBuffer`。编码器的目的是确保数据在网络中传输时保持正确格式。 ```java public...
Mina提供了一个高级抽象层,允许开发者用类似处理Java IO的方式处理NIO(非阻塞I/O)。它简化了网络编程,使得开发者可以专注于业务逻辑,而无需关心底层的网络细节。Mina支持多种协议,如HTTP、FTP、Telnet等,同时...
session.write(((IoBuffer) message).duplicate()); // 将接收到的数据写回客户端 } } ``` ##### 2. 添加日志过滤器 为了记录客户端请求和响应,可以在代码中添加日志过滤器。 ```java public static void main...
protected boolean doDecode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception { // 在此处解析数据包 return false; } } ``` ### 总结 本篇主要介绍了如何使用HPsocket中的`...
public void setInputStream(InputStream in) {} @Override public void setOutputStream(OutputStream out) { this.out = out; } @Override public void setErrorStream(OutputStream err) { this.err = ...
server ERROR 500 - Failed to connect: org.apache.mina.common.RuntimeIOException: Failed to get the session [ConnectException: Connection refused]. server WARN 200 - ...
### Netty5.0架构剖析和源码解读 #### 1. 概述 ##### 1.1. JAVA的IO演进 ###### 1.1.1....在JDK 1.4之前,Java网络编程主要依赖于传统的...private static void handleRead(ChannelHandlerContext ctx, ByteBuf in) { ...
Java二进制IO类与文件复制操作实例 16个目标文件 内容索引:Java源码,初学实例,二进制,文件复制 Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系...