public boolean decode() {
    	try {
	    	configVersion 	= byteBuffer.getInt();
	    	version 		= byteBuffer.getShort();
	    	resultCode 		= byteBuffer.getInt();
	        int count 		= byteBuffer.getInt();
	        for (int i = 0; i < count; ++i) {
	        	int size = byteBuffer.getInt();
	        	if (size > 0) {
	        		Object o = null;
					try {
						o = transcoder.decode(
							byteBuffer.array(), 
							byteBuffer.position(), size);
					} catch (Throwable e) {
						resultCode =  ResultCode.SERIALIZEERROR.getCode();
						return false;
					}
					if (o != null)
						objs.add(o);
					byteBuffer.position(byteBuffer.position() + size);
				}
	        }
    	} catch (BufferUnderflowException e) {
    		//TODO: log warning
    		resultCode =  ResultCode.SERIALIZEERROR.getCode();
			return false;
    	}
        return true;
    }