⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 objectreader.java

📁 精通tomcat书籍原代码,希望大家共同学习
💻 JAVA
字号:
/* * Copyright 1999,2004-2005 The Apache Software Foundation. *  * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at *  *      http://www.apache.org/licenses/LICENSE-2.0 *  * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package org.apache.catalina.tribes.io;import java.io.IOException;import java.net.Socket;import java.nio.ByteBuffer;import java.nio.channels.Selector;import java.nio.channels.SocketChannel;import org.apache.catalina.tribes.ChannelMessage;/** * The object reader object is an object used in conjunction with * java.nio TCP messages. This object stores the message bytes in a * <code>XByteBuffer</code> until a full package has been received. * When a full package has been received, the append method will call messageDataReceived * on the callback object associated with this object reader.<BR> * This object uses an XByteBuffer which is an extendable object buffer that also allows * for message encoding and decoding. * * @author Filip Hanik * @version $Revision: 377484 $, $Date: 2006-02-13 15:00:05 -0600 (Mon, 13 Feb 2006) $ */public class ObjectReader {    protected static org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(ObjectReader.class);    private XByteBuffer buffer;    /**     * Create XByteBuffer and store parameter     * @param channel     * @param selector     * @param callback     */    public ObjectReader(SocketChannel channel) {        this(channel.socket());    }    public ObjectReader(Socket socket) {        try{            this.buffer = new XByteBuffer(socket.getReceiveBufferSize(), true);        }catch ( IOException x ) {            //unable to get buffer size            log.warn("Unable to retrieve the socket receiver buffer size, setting to default 43800 bytes.");            this.buffer = new XByteBuffer(43800,true);        }    }    /**     * Append new bytes to buffer.      * @see XByteBuffer#countPackages()     * @param data new transfer buffer     * @param off offset     * @param len length in buffer     * @return number of messages that sended to callback     * @throws java.io.IOException     */    public int append(ByteBuffer data, int len, boolean count) throws java.io.IOException {       buffer.append(data,len);       int pkgCnt = -1;       if ( count ) pkgCnt = buffer.countPackages();       return pkgCnt;   }     public int append(byte[] data,int off,int len, boolean count) throws java.io.IOException {        buffer.append(data,off,len);        int pkgCnt = -1;        if ( count ) pkgCnt = buffer.countPackages();        return pkgCnt;    }    /**     * Send buffer to cluster listener (callback).     * Is message complete receiver send message to callback?     *     * @see org.apache.catalina.tribes.transport.ClusterReceiverBase#messageDataReceived(ChannelMessage)     * @see XByteBuffer#doesPackageExist()     * @see XByteBuffer#extractPackage(boolean)     *     * @return number of received packages/messages     * @throws java.io.IOException     */    public ChannelMessage[] execute() throws java.io.IOException {        int pkgCnt = buffer.countPackages();        ChannelMessage[] result = new ChannelMessage[pkgCnt];        for (int i=0; i<pkgCnt; i++)  {            ChannelMessage data = buffer.extractPackage(true);            result[i] = data;        }        return result;    }        public int bufferSize() {        return buffer.getLength();    }        /**     * Returns the number of packages that the reader has read     * @return int     */    public int count() {        return buffer.countPackages();    }        public void close() {        this.buffer = null;    }}

⌨️ 快捷键说明

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