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

📄 xbytebuffer.java

📁 精通tomcat书籍原代码,希望大家共同学习
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
     * @return - true if a complete package (header,options,size,data,footer) exists within the buffer     */    public boolean doesPackageExist()  {        return (countPackages()>0);    }    /**     * Extracts the message bytes from a package.     * If no package exists, a IllegalStateException will be thrown.     * @param clearFromBuffer - if true, the package will be removed from the byte buffer     * @return - returns the actual message bytes (header, compress,size and footer not included).     */    public byte[] extractDataPackage(boolean clearFromBuffer) {        int psize = countPackages();        if (psize == 0) throw new java.lang.IllegalStateException("No package exists in XByteBuffer");        int size = toInt(buf, START_DATA.length);        byte[] data = new byte[size];        System.arraycopy(buf, START_DATA.length + 4, data, 0, size);        if (clearFromBuffer) {            int totalsize = START_DATA.length + 4 + size + END_DATA.length;            bufSize = bufSize - totalsize;            System.arraycopy(buf, totalsize, buf, 0, bufSize);        }        return data;    }        public ClusterData extractPackage(boolean clearFromBuffer) throws java.io.IOException {        byte[] data = extractDataPackage(clearFromBuffer);        ClusterData cdata = ClusterData.getDataFromPackage(data);        return cdata;    }        /**     * Creates a complete data package     * @param indata - the message data to be contained within the package     * @param compressed - compression flag for the indata buffer     * @return - a full package (header,compress,size,data,footer)     *      */    public static byte[] createDataPackage(ClusterData cdata) {        return createDataPackage(cdata.getDataPackage());    }        public static int getDataPackageLength(int datalength) {        int length =             START_DATA.length + //header length            4 + //data length indicator            datalength + //actual data length            END_DATA.length; //footer length        return length;    }        public static byte[] createDataPackage(byte[] data) {        int length = getDataPackageLength(data.length);        byte[] result = new byte[length];        return createDataPackage(data,0,data.length,result,0);    }        public static byte[] createDataPackage(byte[] data, int doff, int dlength, byte[] buffer, int bufoff) {        if ( (buffer.length-bufoff) > getDataPackageLength(dlength) ) {            throw new ArrayIndexOutOfBoundsException("Unable to create data package, buffer is too small.");        }        System.arraycopy(START_DATA, 0, buffer, bufoff, START_DATA.length);        toBytes(data.length,buffer, bufoff+START_DATA.length);        System.arraycopy(data, doff, buffer, bufoff+START_DATA.length + 4, dlength);        System.arraycopy(END_DATA, 0, buffer, bufoff+START_DATA.length + 4 + data.length, END_DATA.length);        return buffer;    }    public static void fillDataPackage(byte[] data, int doff, int dlength, XByteBuffer buf) {        int pkglen = getDataPackageLength(dlength);        if ( buf.getCapacity() <  pkglen ) buf.expand(pkglen);        createDataPackage(data,doff,dlength,buf.getBytesDirect(),buf.getLength());    }    /**     * Convert four bytes to an int     * @param b - the byte array containing the four bytes     * @param off - the offset     * @return the integer value constructed from the four bytes     * @exception java.lang.ArrayIndexOutOfBoundsException     */    public static int toInt(byte[] b,int off){        return ( ( (int) b[off+3]) & 0xFF) +            ( ( ( (int) b[off+2]) & 0xFF) << 8) +            ( ( ( (int) b[off+1]) & 0xFF) << 16) +            ( ( ( (int) b[off+0]) & 0xFF) << 24);    }    /**     * Convert eight bytes to a long     * @param b - the byte array containing the four bytes     * @param off - the offset     * @return the long value constructed from the eight bytes     * @exception java.lang.ArrayIndexOutOfBoundsException     */    public static long toLong(byte[] b,int off){        return ( ( (long) b[off+7]) & 0xFF) +            ( ( ( (long) b[off+6]) & 0xFF) << 8) +            ( ( ( (long) b[off+5]) & 0xFF) << 16) +            ( ( ( (long) b[off+4]) & 0xFF) << 24) +            ( ( ( (long) b[off+3]) & 0xFF) << 32) +            ( ( ( (long) b[off+2]) & 0xFF) << 40) +            ( ( ( (long) b[off+1]) & 0xFF) << 48) +            ( ( ( (long) b[off+0]) & 0xFF) << 56);    }        /**     * Converts an integer to four bytes     * @param n - the integer     * @return - four bytes in an array     * @deprecated use toBytes(boolean,byte[],int)     */    public static byte[] toBytes(boolean bool) {        byte[] b = new byte[1] ;        return toBytes(bool,b,0);    }        public static byte[] toBytes(boolean bool, byte[] data, int offset) {        data[offset] = (byte)(bool?1:0);        return data;    }        /**     *      * @param <any> long     * @return use     */    public static boolean toBoolean(byte[] b, int offset) {        return b[offset] != 0;    }        /**     * Converts an integer to four bytes     * @param n - the integer     * @return - four bytes in an array     * @deprecated use toBytes(int,byte[],int)     */    public static byte[] toBytes(int n) {        return toBytes(n,new byte[4],0);    }    public static byte[] toBytes(int n,byte[] b, int offset) {        b[offset+3] = (byte) (n);        n >>>= 8;        b[offset+2] = (byte) (n);        n >>>= 8;        b[offset+1] = (byte) (n);        n >>>= 8;        b[offset+0] = (byte) (n);        return b;    }    /**     * Converts an long to eight bytes     * @param n - the long     * @return - eight bytes in an array     * @deprecated use toBytes(long,byte[],int)     */    public static byte[] toBytes(long n) {        return toBytes(n,new byte[8],0);    }    public static byte[] toBytes(long n, byte[] b, int offset) {        b[offset+7] = (byte) (n);        n >>>= 8;        b[offset+6] = (byte) (n);        n >>>= 8;        b[offset+5] = (byte) (n);        n >>>= 8;        b[offset+4] = (byte) (n);        n >>>= 8;        b[offset+3] = (byte) (n);        n >>>= 8;        b[offset+2] = (byte) (n);        n >>>= 8;        b[offset+1] = (byte) (n);        n >>>= 8;        b[offset+0] = (byte) (n);        return b;    }    /**     * Similar to a String.IndexOf, but uses pure bytes     * @param src - the source bytes to be searched     * @param srcOff - offset on the source buffer     * @param find - the string to be found within src     * @return - the index of the first matching byte. -1 if the find array is not found     */    public static int firstIndexOf(byte[] src, int srcOff, byte[] find){        int result = -1;        if (find.length > src.length) return result;        if (find.length == 0 || src.length == 0) return result;        if (srcOff >= src.length ) throw new java.lang.ArrayIndexOutOfBoundsException();        boolean found = false;        int srclen = src.length;        int findlen = find.length;        byte first = find[0];        int pos = srcOff;        while (!found) {            //find the first byte            while (pos < srclen){                if (first == src[pos])                    break;                pos++;            }            if (pos >= srclen)                return -1;            //we found the first character            //match the rest of the bytes - they have to match            if ( (srclen - pos) < findlen)                return -1;            //assume it does exist            found = true;            for (int i = 1; ( (i < findlen) && found); i++)                found = found && (find[i] == src[pos + i]);            if (found)                result = pos;            else if ( (srclen - pos) < findlen)                return -1; //no more matches possible            else                pos++;        }        return result;    }        public static Serializable deserialize(byte[] data)         throws IOException, ClassNotFoundException, ClassCastException {        return deserialize(data,0,data.length);    }        public static Serializable deserialize(byte[] data, int offset, int length)          throws IOException, ClassNotFoundException, ClassCastException {        return deserialize(data,offset,length,null);         }    public static int invokecount = 0;    public static Serializable deserialize(byte[] data, int offset, int length, ClassLoader[] cls)         throws IOException, ClassNotFoundException, ClassCastException {        synchronized (XByteBuffer.class) { invokecount++;}        Object message = null;        if ( cls == null ) cls = new ClassLoader[0];        if (data != null) {            InputStream  instream = new ByteArrayInputStream(data,offset,length);            ObjectInputStream stream = null;            stream = (cls.length>0)? new ReplicationStream(instream,cls):new ObjectInputStream(instream);            message = stream.readObject();            instream.close();            stream.close();        }        if ( message == null ) {            return null;        } else if (message instanceof Serializable)            return (Serializable) message;        else {            throw new ClassCastException("Message has the wrong class. It should implement Serializable, instead it is:"+message.getClass().getName());        }    }    /**     * Serializes a message into cluster data     * @param msg ClusterMessage     * @param compress boolean     * @return      * @throws IOException     */    public static byte[] serialize(Serializable msg) throws IOException {        ByteArrayOutputStream outs = new ByteArrayOutputStream();        ObjectOutputStream out = new ObjectOutputStream(outs);        out.writeObject(msg);        out.flush();        byte[] data = outs.toByteArray();        return data;    }    }

⌨️ 快捷键说明

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