code: public void save(Object o) throws PickleException, IOException {
  		recurse++;
  		if(recurse>MAX_RECURSE_DEPTH)
  			throw new java.lang.StackOverflowError("recursion too deep in Pickler.save (>"+MAX_RECURSE_DEPTH+")");
  
  		// null type?
  		if(o==null) {
  			out.write(Opcodes.NONE);
  			recurse--;
  			return;
  		}
  
  		// check the memo table, otherwise simply dispatch
  		Class<?> t = o.getClass();
  		if(lookupMemo(t, o) || dispatch(t, o)){
  			recurse--;
  			return;
  		}
  
  		throw new PickleException("couldn't pickle object of type "+t);
  	}
docs: Pickle a single object and write its pickle representation to the output stream.
  Normally this is used internally by the pickler, but you can also utilize it from
  within custom picklers. This is handy if as part of the custom pickler, you need
  to write a couple of normal objects such as strings or ints, that are already
  supported by the pickler.
  This method can be called recursively to output sub-objects.