@Override public void writeExternal(ObjectOutput oo) throws IOException { /* * Serialization format: * byte 1: serial version * byte 2: name length (l) * byte 3 to l+3: name * byte l+4 to l+67: size of node * byte l+68: children count * byte l+69 to n: children (recursive) */ if (name != null && name.length() > Short.MAX_VALUE) throw new IOException("Name of node exceeds maximum allowed size of " + Short.MAX_VALUE); if (children.size() > Short.MAX_VALUE) throw new IOException( "Number of subfolders in " + name + " exceeds maximum allowed number: " + Short.MAX_VALUE); oo.writeByte(serialVersion); if (name != null) { oo.writeByte(name.length()); oo.writeBytes(name); } else { oo.writeByte(1); oo.writeByte(0); } oo.writeLong(size); oo.writeByte(children.size()); for (FSTree child : children.values()) { child.writeExternal(oo); } }
public void writeString(final String s) throws IOException { final ObjectOutput out = this.out; if (s != null) { final int cn = s.length(); ASCII: if (cn <= BA_LENGTH) { for (int ci = 0; ci < cn; ) { if ((s.charAt(ci++) & 0xffffff00) != 0) { break ASCII; } } if (cn <= 8) { out.writeInt(-cn); out.writeBytes(s); return; } else { out.writeInt(-cn); s.getBytes(0, cn, this.ba, 0); out.write(this.ba, 0, cn); return; } } out.writeInt(cn); out.writeChars(s); return; } else { out.writeInt(Integer.MIN_VALUE); return; } }
public void writeBytes(String s) throws IOException { oo.writeBytes(s); }