Serialization API
History
The serialization API provides means of serializing JavaScript values in a way that is compatible with the HTML structured clone algorithm.
The format is backward-compatible (i.e. safe to store to disk). Equal JavaScript values may result in different serialized output.
v8.serialize(value): Buffer
Uses a DefaultSerializer to serialize value into a buffer.
ERR_BUFFER_TOO_LARGE will be thrown when trying to
serialize a huge object which requires buffer
larger than buffer.constants.MAX_LENGTH.
v8.deserialize(buffer): void
Buffer | TypedArray | DataViewserialize().Uses a DefaultDeserializer with default options to read a JS value
from a buffer.
new Serializer(): Serializer
Creates a new Serializer object.
serializer.writeHeader(): void
Writes out a header, which includes the serialization format version.
serializer.writeValue(value): void
anySerializes a JavaScript value and adds the serialized representation to the internal buffer.
This throws an error if value cannot be serialized.
serializer.releaseBuffer(): Buffer
BufferReturns the stored internal buffer. This serializer should not be used once the buffer is released. Calling this method results in undefined behavior if a previous write has failed.
serializer.transferArrayBuffer(id, arrayBuffer): void
integerArrayBufferArrayBuffer instance.Marks an ArrayBuffer as having its contents transferred out of band.
Pass the corresponding ArrayBuffer in the deserializing context to
deserializer.transferArrayBuffer().
serializer.writeUint32(value): void
integerWrite a raw 32-bit unsigned integer.
For use inside of a custom serializer._writeHostObject().
serializer.writeUint64(hi, lo): void
Write a raw 64-bit unsigned integer, split into high and low 32-bit parts.
For use inside of a custom serializer._writeHostObject().
serializer.writeDouble(value): void
numberWrite a JS number value.
For use inside of a custom serializer._writeHostObject().
serializer.writeRawBytes(buffer): void
Buffer | TypedArray | DataViewWrite raw bytes into the serializer's internal buffer. The deserializer
will require a way to compute the length of the buffer.
For use inside of a custom serializer._writeHostObject().
serializer._writeHostObject(object): void
ObjectThis method is called to write some kind of host object, i.e. an object created
by native C++ bindings. If it is not possible to serialize object, a suitable
exception should be thrown.
This method is not present on the Serializer class itself but can be provided
by subclasses.
serializer._getDataCloneError(message): void
stringThis method is called to generate error objects that will be thrown when an object can not be cloned.
This method defaults to the Error constructor and can be overridden on
subclasses.
serializer._getSharedArrayBufferId(sharedArrayBuffer): void
SharedArrayBufferThis method is called when the serializer is going to serialize a
SharedArrayBuffer object. It must return an unsigned 32-bit integer ID for
the object, using the same ID if this SharedArrayBuffer has already been
serialized. When deserializing, this ID will be passed to
deserializer.transferArrayBuffer().
If the object cannot be serialized, an exception should be thrown.
This method is not present on the Serializer class itself but can be provided
by subclasses.
serializer._setTreatArrayBufferViewsAsHostObjects(flag?): void
booleanfalseIndicate whether to treat TypedArray and DataView objects as
host objects, i.e. pass them to serializer._writeHostObject().
new Deserializer(buffer): Deserializer
Buffer | TypedArray | DataViewserializer.releaseBuffer().Creates a new Deserializer object.
deserializer.readHeader(): void
Reads and validates a header (including the format version).
May, for example, reject an invalid or unsupported wire format. In that case,
an Error is thrown.
deserializer.readValue(): void
Deserializes a JavaScript value from the buffer and returns it.
deserializer.transferArrayBuffer(id, arrayBuffer): void
integerArrayBuffer | SharedArrayBufferArrayBuffer instance.Marks an ArrayBuffer as having its contents transferred out of band.
Pass the corresponding ArrayBuffer in the serializing context to
serializer.transferArrayBuffer() (or return the id from
serializer._getSharedArrayBufferId() in the case of SharedArrayBuffers).
deserializer.getWireFormatVersion(): integer
integerReads the underlying wire format version. Likely mostly to be useful to
legacy code reading old wire format versions. May not be called before
.readHeader().
deserializer.readUint32(): integer
integerRead a raw 32-bit unsigned integer and return it.
For use inside of a custom deserializer._readHostObject().
deserializer.readUint64(): integer[]
integer[]Read a raw 64-bit unsigned integer and return it as an array [hi, lo]
with two 32-bit unsigned integer entries.
For use inside of a custom deserializer._readHostObject().
deserializer.readDouble(): number
numberRead a JS number value.
For use inside of a custom deserializer._readHostObject().
deserializer.readRawBytes(length): Buffer
Read raw bytes from the deserializer's internal buffer. The length parameter
must correspond to the length of the buffer that was passed to
serializer.writeRawBytes().
For use inside of a custom deserializer._readHostObject().
deserializer._readHostObject(): void
This method is called to read some kind of host object, i.e. an object that is created by native C++ bindings. If it is not possible to deserialize the data, a suitable exception should be thrown.
This method is not present on the Deserializer class itself but can be
provided by subclasses.
A subclass of Serializer that serializes TypedArray
(in particular Buffer) and DataView objects as host objects, and only
stores the part of their underlying ArrayBuffers that they are referring to.
A subclass of Deserializer corresponding to the format written by
DefaultSerializer.