private void decode(byte[] bytes) throws VLQNegativeException, UnsupportedEncodingException
	{
		this.type = bytes[0];
		if (getType()==VariantType.NULL) // no array copy, no more data to check
		{
			value = null;
			return;
		}
		dataBytes = new byte[bytes.length-1];
		for (int i = 0; i < dataBytes.length; i++)
		{
			dataBytes[i] = bytes[i+1];
		}
		switch (getType())
		{
			case DOUBLE:
				decodeDouble();
				break;
			case BOOL:
				decodeBool();
				break;
			case VLQ:
				decodeVLQ();
				break;
			case STRING:
				decodeString();
				break;
			case VARIANTARRAY:
				decodeVariantArray();
				break;
			case DICTIONARY:
				decodeDictionary();
				break;
			default:
				value = null;
				break;
		}
	}