} else if (value instanceof Long) { out.writeByte(4); out.writeLong(((Long) value).longValue()); } else if (value instanceof Double) { out.writeByte(5); out.writeDouble(((Double) value).doubleValue()); } else if (value instanceof Version) { out.writeByte(6); writeVersion((Version) value, out); } else if ("java.net.URI".equals(value.getClass().getName())) { out.writeByte(7); writeStringOrNull(value.toString(), out);
	private void writeMap(DataOutputStream out, Map source) throws IOException {		if (source == null) {			out.writeInt(0);		} else {			out.writeInt(source.size());			Iterator iter = source.keySet().iterator();			while (iter.hasNext()) {				String key = (String) iter.next();				Object value = source.get(key);				writeStringOrNull(key, out);				if (value instanceof String) {					out.writeByte(0);					writeStringOrNull((String) value, out);				} else if (value instanceof String[]) {					out.writeByte(1);					writeList(out, (String[]) value);				} else if (value instanceof Boolean) {					out.writeByte(2);					out.writeBoolean(((Boolean) value).booleanValue());				} else if (value instanceof Integer) {					out.writeByte(3);					out.writeInt(((Integer) value).intValue());				}			}		}	}