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

📄 blockedpacketio.java

📁 mysql集群
💻 JAVA
字号:
/*
 * 	This program is free software; you can redistribute it and/or modify it under the terms of 
 * the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, 
 * or (at your option) any later version. 
 * 
 * 	This program is distributed in the hope that it will be useful, 
 * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
 * See the GNU General Public License for more details. 
 * 	You should have received a copy of the GNU General Public License along with this program; 
 * if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */
package com.meidusa.amoeba.mysql.net.packet;

import java.io.EOFException;
import java.io.IOException;
import java.io.InputStream;
import java.sql.SQLException;

import com.meidusa.amoeba.mysql.jdbc.Messages;

/**
 * 阻塞模式读取 packet
 * @author <a href=mailto:piratebase@sina.com>Struct chen</a>
 *
 */
public class BlockedPacketIO {

	public static final int readFully(InputStream in, byte[] b, int off, int len)
			throws IOException {
		if (len < 0) {
			throw new IndexOutOfBoundsException();
		}
		int n = 0;
		while (n < len) {
			int count = in.read(b, off + n, len - n);
			if (count < 0) {
				throw new EOFException(Messages.getString("MysqlIO.EOF",
						new Object[] { new Integer(len), new Integer(n) }));
			}
			n += count;
		}
		return n;
	}
	
	
    /**
     *
     * @return the packet from the server.
     *
     * @throws SQLException DOCUMENT ME!
     * @throws IOException 
     */
    public static final MysqlPacketBuffer readFullyPacketBuffer(InputStream mysqlInput) throws IOException {
    	
    		byte[] packetHeaderBuf = new byte[4];
            int lengthRead = readFully(mysqlInput,packetHeaderBuf, 0, 4);

            if (lengthRead < 4) {
                throw new IOException(Messages.getString("MysqlIO.1")); //$NON-NLS-1$
            }

            //数据包长度
            int packetLength = (packetHeaderBuf[0] & 0xff) +
                ((packetHeaderBuf[1] & 0xff) << 8) +
                ((packetHeaderBuf[2] & 0xff) << 16);

            //缓冲区长度
            int bufferLength = packetLength +4;
            // Read data
            byte[] buffer = new byte[bufferLength + 1];
            System.arraycopy(packetHeaderBuf, 0, buffer, 0,	4);
            
            int numBytesRead = readFully(mysqlInput, buffer, 4,
                    packetLength);

            if (numBytesRead != packetLength) {
                throw new IOException("Short read, expected " +
                    packetLength + " bytes, only read " + numBytesRead);
            }

            buffer[bufferLength] = 0;
            MysqlPacketBuffer packet = new MysqlPacketBuffer(buffer);
            packet.setBufLength(bufferLength + 1);
            
            return packet;
    }
    
}

⌨️ 快捷键说明

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