public static List<? extends Object> deSerialize(byte[] source)
			throws IOException {
		ByteBuffer buffer = ByteBuffer.wrap(source);
		int meta = buffer.getInt();
		int type = getType(meta);
		String value = new String(source, 4, source.length - 4, charset);

		switch (type) {
		case ELEMENT_TYPE_INT:
			List<Integer> resInts = new ArrayList<Integer>();
			JSONArray arrayInts = (JSONArray) JSONValue.parse(value);
			for (Object object : arrayInts) {
				resInts.add(Integer.parseInt(object.toString()));
			}
			return resInts;
		case ELEMENT_TYPE_LLONG:
			List<Long> resLongs = new ArrayList<Long>();
			JSONArray arrayLongs = (JSONArray) JSONValue.parse(value);
			for (Object object : arrayLongs) {
				resLongs.add(Long.parseLong(object.toString()));
			}
			return resLongs;
		case ELEMENT_TYPE_DOUBLE:
			List<Double> resDoubles = new ArrayList<Double>();
			JSONArray arrayDoubles = (JSONArray) JSONValue.parse(value);
			for (Object object : arrayDoubles) {
				resDoubles.add(Double.parseDouble(object.toString()));
			}
			return resDoubles;
		case ELEMENT_TYPE_STRING:
			List<String> results = new ArrayList<String>();
			JSONArray arrayString = (JSONArray) JSONValue.parse(value);
			for (Object object : arrayString)
				results.add((String) object);
			return results;
		default:
			break;
		}

		return null;
	}