org.mozilla.javascript.serialize

## Class ScriptableOutputStream

- java.lang.Object
- - java.io.OutputStream
  - - java.io.ObjectOutputStream
    - - org.mozilla.javascript.serialize.ScriptableOutputStream

- All Implemented Interfaces:
    java.io.Closeable, java.io.DataOutput, java.io.Flushable, java.io.ObjectOutput, java.io.ObjectStreamConstants, java.lang.AutoCloseable

      public class ScriptableOutputStream
      extends java.io.ObjectOutputStream

  Class ScriptableOutputStream is an ObjectOutputStream used to serialize JavaScript objects and functions. Note that compiled functions currently cannot be serialized, only interpreted functions. The top-level scope containing the object is not written out, but is instead replaced with another top-level object when the ScriptableInputStream reads in this object. Also, object corresponding to names added to the exclude list are not written out but instead are looked up during deserialization. This approach avoids the creation of duplicate copies of standard objects during deserialization.
  Author:
    Norris Boyd

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from class java.io.ObjectOutputStream

      `java.io.ObjectOutputStream.PutField`

  - ### Field Summary

    - ### Fields inherited from interface java.io.ObjectStreamConstants

      `baseWireHandle, PROTOCOL_VERSION_1, PROTOCOL_VERSION_2, SC_BLOCK_DATA, SC_ENUM, SC_EXTERNALIZABLE, SC_SERIALIZABLE, SC_WRITE_METHOD, STREAM_MAGIC, STREAM_VERSION, SUBCLASS_IMPLEMENTATION_PERMISSION, SUBSTITUTION_PERMISSION, TC_ARRAY, TC_BASE, TC_BLOCKDATA, TC_BLOCKDATALONG, TC_CLASS, TC_CLASSDESC, TC_ENDBLOCKDATA, TC_ENUM, TC_EXCEPTION, TC_LONGSTRING, TC_MAX, TC_NULL, TC_OBJECT, TC_PROXYCLASSDESC, TC_REFERENCE, TC_RESET, TC_STRING`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `ScriptableOutputStream(java.io.OutputStream out, Scriptable scope)` ScriptableOutputStream constructor.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `addExcludedName(java.lang.String name)` Adds a qualified name to the list of objects to be excluded from serialization.
    `void` | `addOptionalExcludedName(java.lang.String name)` Adds a qualified name to the list of object to be excluded from serialization.
    `void` | `excludeAllIds(java.lang.Object[] ids)`
    `void` | `excludeStandardObjectNames()` Adds the names of the standard objects and their prototypes to the list of excluded names.
    `boolean` | `hasExcludedName(java.lang.String name)` Returns true if the name is excluded from serialization.
    `void` | `removeExcludedName(java.lang.String name)` Removes a name from the list of names to exclude.
    `protected java.lang.Object` | `replaceObject(java.lang.Object obj)`

    - ### Methods inherited from class java.io.ObjectOutputStream

      `annotateClass, annotateProxyClass, close, defaultWriteObject, drain, enableReplaceObject, flush, putFields, reset, useProtocolVersion, write, write, write, writeBoolean, writeByte, writeBytes, writeChar, writeChars, writeClassDescriptor, writeDouble, writeFields, writeFloat, writeInt, writeLong, writeObject, writeObjectOverride, writeShort, writeStreamHeader, writeUnshared, writeUTF`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### ScriptableOutputStream

          public ScriptableOutputStream(java.io.OutputStream out,
                                Scriptable scope)
                                 throws java.io.IOException

      ScriptableOutputStream constructor. Creates a ScriptableOutputStream for use in serializing JavaScript objects. Calls excludeStandardObjectNames.
      Parameters:
        `out` - the OutputStream to write to.
        `scope` - the scope containing the object.
      Throws:
        `java.io.IOException`

  - ### Method Detail

    - #### excludeAllIds

          public void excludeAllIds(java.lang.Object[] ids)

    - #### addOptionalExcludedName

          public void addOptionalExcludedName(java.lang.String name)

      Adds a qualified name to the list of object to be excluded from serialization. Names excluded from serialization are looked up in the new scope and replaced upon deserialization.
      Parameters:
        `name` - a fully qualified name (of the form "a.b.c", where "a" must be a property of the top-level object). The object need not exist, in which case the name is ignored.
      Throws:
        `java.lang.IllegalArgumentException` - if the object is not a `Scriptable`.

    - #### addExcludedName

          public void addExcludedName(java.lang.String name)

      Adds a qualified name to the list of objects to be excluded from serialization. Names excluded from serialization are looked up in the new scope and replaced upon deserialization.
      Parameters:
        `name` - a fully qualified name (of the form "a.b.c", where "a" must be a property of the top-level object)
      Throws:
        `java.lang.IllegalArgumentException` - if the object is not found or is not a `Scriptable`.

    - #### hasExcludedName

          public boolean hasExcludedName(java.lang.String name)

      Returns true if the name is excluded from serialization.

    - #### removeExcludedName

          public void removeExcludedName(java.lang.String name)

      Removes a name from the list of names to exclude.

    - #### excludeStandardObjectNames

          public void excludeStandardObjectNames()

      Adds the names of the standard objects and their prototypes to the list of excluded names.

    - #### replaceObject

          protected java.lang.Object replaceObject(java.lang.Object obj)
                                            throws java.io.IOException

      Overrides:
        `replaceObject` in class `java.io.ObjectOutputStream`
      Throws:
        `java.io.IOException`