private int writeClass(Class<?> type) throws IOException { SerializeCache cache = getSerializeCache(type, mode); if (cache == null) { cache = new SerializeCache(); ByteArrayOutputStream cachestream = new ByteArrayOutputStream(); Map<String, MemberAccessor> members = HproseHelper.getMembers(type, mode); int count = members.size(); cachestream.write(HproseTags.TagClass); writeUTF8String(HproseHelper.getClassName(type), cachestream); if (count > 0) { writeInt(count, cachestream); } cachestream.write(HproseTags.TagOpenbrace); for (Entry<String, MemberAccessor> member : members.entrySet()) { cachestream.write(HproseTags.TagString); writeUTF8String(member.getKey(), cachestream); ++cache.refcount; } cachestream.write(HproseTags.TagClosebrace); cache.data = cachestream.toByteArray(); putSerializeCache(type, mode, cache); } stream.write(cache.data); lastref += cache.refcount; int cr = lastclassref++; classref.put(type, cr); return cr; }