nbmessageform_nio.java

来自「JGRoups源码」· Java 代码 · 共 91 行

JAVA
91
字号
// $Id: NBMessageForm_NIO.java,v 1.3 2005/06/30 15:38:43 belaban Exp $package org.jgroups.blocks;import java.io.IOException;import java.nio.ByteBuffer;import java.nio.channels.SocketChannel;/** * NBMessageForm - Message form for non-blocking message reads. * @author akbollu * @author Bela Ban */public class NBMessageForm_NIO{	ByteBuffer headerBuffer = null;	ByteBuffer dataBuffer = null;	static final int HEADER_SIZE = 4;	final boolean isComplete = false;	int messageSize = 0;	boolean w_in_p = false;	SocketChannel channel = null;	public NBMessageForm_NIO(int dataBuffSize, SocketChannel ch)	{		headerBuffer = ByteBuffer.allocate(HEADER_SIZE);		dataBuffer = ByteBuffer.allocate(dataBuffSize);		channel = ch;	}    public ByteBuffer readCompleteMsgBuffer() throws IOException    {        int rt;        try {            rt = channel.read(headerBuffer);            if ( (rt == 0) || (rt == -1) )            {                channel.close();                return null;            }            if (rt == HEADER_SIZE)            {                headerBuffer.flip();                messageSize = headerBuffer.getInt();                if(dataBuffer.capacity() < messageSize)                {                    dataBuffer = ByteBuffer.allocate(messageSize);                }            }            else {                return null;            }        }        catch(IOException ex) {            channel.close();            throw ex;        }        //rt == 0 need not be checked twice in the same event        channel.read(dataBuffer);        if(isComplete())        {            dataBuffer.flip();            return dataBuffer;        }        return null;    }	public void reset()	{		dataBuffer.clear();		headerBuffer.clear();		messageSize = 0;		w_in_p = false;	}		private boolean isComplete()	{		return ( dataBuffer.position() == messageSize );	}	}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?