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

📄 whalintranscoder.java

📁 memcached JAVA客户端API,应用广泛,运行比较稳定。
💻 JAVA
字号:
package net.spy.memcached.transcoders;import java.util.Date;import net.spy.memcached.CachedData;/** * Transcoder that provides compatibility with Greg Whalin's memcached client. */public class WhalinTranscoder extends BaseSerializingTranscoder	implements Transcoder<Object> {	static final int SPECIAL_BYTE = 1;	static final int SPECIAL_BOOLEAN = 8192;	static final int SPECIAL_INT = 4;	static final int SPECIAL_LONG = 16384;	static final int SPECIAL_CHARACTER = 16;	static final int SPECIAL_STRING = 32;	static final int SPECIAL_STRINGBUFFER = 64;	static final int SPECIAL_FLOAT = 128;	static final int SPECIAL_SHORT = 256;	static final int SPECIAL_DOUBLE = 512;	static final int SPECIAL_DATE = 1024;	static final int SPECIAL_STRINGBUILDER = 2048;	static final int SPECIAL_BYTEARRAY = 4096;	static final int COMPRESSED = 2;	static final int SERIALIZED = 8;	private final TranscoderUtils tu=new TranscoderUtils(false);	/* (non-Javadoc)	 * @see net.spy.memcached.Transcoder#decode(net.spy.memcached.CachedData)	 */	public Object decode(CachedData d) {		byte[] data=d.getData();		Object rv=null;		if((d.getFlags() & COMPRESSED) != 0) {			data=decompress(d.getData());		}		if((d.getFlags() & SERIALIZED) != 0) {			rv=deserialize(data);		} else {			int f=d.getFlags() & ~COMPRESSED;			switch(f) {				case SPECIAL_BOOLEAN:					rv=Boolean.valueOf(this.decodeBoolean(data));					break;				case SPECIAL_INT:					rv=new Integer(tu.decodeInt(data));					break;				case SPECIAL_SHORT:					rv=new Short((short)tu.decodeInt(data));					break;				case SPECIAL_LONG:					rv=new Long(tu.decodeLong(data));					break;				case SPECIAL_DATE:					rv=new Date(tu.decodeLong(data));					break;				case SPECIAL_BYTE:					rv=new Byte(tu.decodeByte(data));					break;				case SPECIAL_FLOAT:					rv=new Float(Float.intBitsToFloat(tu.decodeInt(data)));					break;				case SPECIAL_DOUBLE:					rv=new Double(Double.longBitsToDouble(tu.decodeLong(data)));					break;				case SPECIAL_BYTEARRAY:					rv=data;					break;				case SPECIAL_STRING:					rv = decodeString(data);					break;				case SPECIAL_STRINGBUFFER:					rv=new StringBuffer(decodeString(data));					break;				case SPECIAL_STRINGBUILDER:					rv=new StringBuilder(decodeString(data));					break;				case SPECIAL_CHARACTER:                                        rv = decodeCharacter(data);                                        break;				default:					getLogger().warn("Cannot handle data with flags %x", f);			}		}		return rv;	}	public CachedData encode(Object o) {		byte[] b=null;		int flags=0;		if(o instanceof String) {			b=encodeString((String)o);			flags |= SPECIAL_STRING;		} else if(o instanceof StringBuffer) {			flags |= SPECIAL_STRINGBUFFER;			b=encodeString(String.valueOf(o));		} else if(o instanceof StringBuilder) {			flags |= SPECIAL_STRINGBUILDER;			b=encodeString(String.valueOf(o));		} else if(o instanceof Long) {			b=tu.encodeLong((Long)o);			flags |= SPECIAL_LONG;		} else if(o instanceof Integer) {			b=tu.encodeInt((Integer)o);			flags |= SPECIAL_INT;		} else if(o instanceof Short) {			b=tu.encodeInt((Short)o);			flags |= SPECIAL_SHORT;		} else if(o instanceof Boolean) {			b=this.encodeBoolean((Boolean)o);			flags |= SPECIAL_BOOLEAN;		} else if(o instanceof Date) {			b=tu.encodeLong(((Date)o).getTime());			flags |= SPECIAL_DATE;		} else if(o instanceof Byte) {			b=tu.encodeByte((Byte)o);			flags |= SPECIAL_BYTE;		} else if(o instanceof Float) {			b=tu.encodeInt(Float.floatToIntBits((Float)o));			flags |= SPECIAL_FLOAT;		} else if(o instanceof Double) {			b=tu.encodeLong(Double.doubleToLongBits((Double)o));			flags |= SPECIAL_DOUBLE;		} else if(o instanceof byte[]) {			b=(byte[])o;			flags |= SPECIAL_BYTEARRAY;		} else if (o instanceof Character) {			b = tu.encodeInt((Character) o);			flags |= SPECIAL_CHARACTER;		} else {			b=serialize(o);			flags |= SERIALIZED;		}		assert b != null;		if(b.length > compressionThreshold) {			byte[] compressed=compress(b);			if(compressed.length < b.length) {				getLogger().info("Compressed %s from %d to %d",						o.getClass().getName(), b.length, compressed.length);				b=compressed;				flags |= COMPRESSED;			} else {				getLogger().info(					"Compression increased the size of %s from %d to %d",					o.getClass().getName(), b.length, compressed.length);			}		}		return new CachedData(flags, b);	}	protected Character decodeCharacter(byte[] b){		return Character.valueOf((char)tu.decodeInt(b));	 }	public byte[] encodeBoolean(boolean b){		byte[] rv = new byte[1];		rv[0] = (byte) (b ? 1 : 0);		return rv;	}	public boolean decodeBoolean(byte[] in) {		assert in.length == 1 : "Wrong length for a boolean";		return in[0] == 1;	}}

⌨️ 快捷键说明

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