else if (type == 4) value = new Long(in.readLong()); else if (type == 5) value = new Double(in.readDouble()); else if (type == 6) value = readVersion(in); else if (type == 7) { value = readString(in, false); try { Class uriClazz = Class.forName("java.net.URI"); Constructor constructor = uriClazz.getConstructor(new Class[] {String.class}); value = constructor.newInstance(new Object[] {value}); } catch (ClassNotFoundException e) {  } catch (Exception e) { if (e instanceof RuntimeException) throw (RuntimeException) e; throw new RuntimeException(e.getMessage()); } }
	private Map readMap(DataInputStream in) throws IOException {		int count = in.readInt();		if (count == 0)			return null;		HashMap result = new HashMap(count);		for (int i = 0; i < count; i++) {			String key = readString(in, false);			Object value = null;			byte type = in.readByte();			if (type == 0)				 value = readString(in, false);			else if (type == 1)				value = readList(in);			else if (type == 2)				value = in.readBoolean() ? Boolean.TRUE : Boolean.FALSE;			else if (type == 3)				value = new Integer(in.readInt());			result.put(key, value);		}		return result;	}