Liking cljdoc? Tell your friends :D

taoensso.nippy.io

Private low-level utils for reading/writing data, don't use.

bb->dinclj

(bb->din bb)
Returns a `DataInput` adapter over given `ByteBuffer`.
Reads from the buffer's current position and advances it.
source

bb->doutclj

(bb->dout bb)
Returns a `DataOutput` adapter over given `ByteBuffer`.
Writes at the buffer's current position and advances it.
source

bb-big-endian!clj

(bb-big-endian! bb)
source

fast-writers?clj

(fast-writers?)
Returns true iff `write-el`'s fast paths match the effective protocol
writers. `extend` installs a new protocol map, so the usual case needs
only an identity check. Called once per collection.
source

IWriteTypedNoMetacljprotocol

write-typedclj

(write-typed _ bb dout_)
Writes given object as type-prefixed bytes. Excludes IObj meta.
source

IWriteTypedNoMetaDincljprotocol

write-typed-dinclj

(write-typed-din _ dout)
Writes given object as type-prefixed bytes. Excludes IObj meta. Takes legacy `DataInput`, used for custom extensions.
source

IWriteTypedWithMetacljprotocol

write-typed-metaclj

(write-typed-meta _ bb dout_)
Writes given IObj as type-prefixed bytes. Includes metadata.
source

read-bigintegerclj

(read-biginteger ibr)
source

read-bytesclj

(read-bytes ibr)
(read-bytes ibr len)
source

read-bytes-lgclj

(read-bytes-lg ibr)
source

read-bytes-mdclj

(read-bytes-md ibr)
source

read-bytes-smclj

(read-bytes-sm ibr)
source

read-bytes-sm*clj

(read-bytes-sm* ibr)
source

read-customclj

(read-custom ibr prefixed? type-id)
source

read-deftypeclj

(read-deftype ibr class-name legacy?)
source

read-intoclj

(read-into to ibr n)
source

read-kvs-deprclj

(read-kvs-depr to ibr)
source

read-kvs-intoclj

(read-kvs-into to ibr n)
source

read-kwclj

(read-kw ibr len)
Reads a keyword of `len` UTF-8 bytes.
source

read-lg-countcljmacro

(read-lg-count ibr)
source

read-listclj

(read-list ibr n bounded-count?)
Reads `n` type-prefixed elements as a `PersistentList`.

`bounded-count?` should be true iff `n` came from a sm/md (byte/short)
prefix, so is inherently too small to enable an allocation attack. Only
then may we pre-size an array without first checking readable length.
source

read-mapclj

(read-map ibr n)
source

read-md-countcljmacro

(read-md-count ibr)
source

read-quarantined-serializable-object-unsafe!clj

(read-quarantined-serializable-object-unsafe! m)
Given a quarantined Serializable object like
{:nippy/unthawable {:class-name <> :content <quarantined-ba>}}, reads and
returns the object WITHOUT regard for `*thaw-serializable-allowlist*`.

**MAY BE UNSAFE!** Don't call this unless you absolutely trust the payload
to not contain any malicious code.

See `*thaw-serializable-allowlist*` for more info.
source

read-recordclj

(read-record ibr class-name)
source

read-sm-countcljmacro

(read-sm-count ibr)
source

read-sm-ucountcljmacro

(read-sm-ucount ibr)
source

read-strclj

(read-str ibr)
(read-str ibr len)
source

read-str-lgclj

(read-str-lg ibr)
source

read-str-mdclj

(read-str-md ibr)
source

read-str-smclj

(read-str-sm ibr)
source

read-str-sm*clj

(read-str-sm* ibr)
source

read-szclj

(read-sz ibr class-name legacy?)
source

read-sz!!clj

(read-sz!! input-stream class-name)
Reads object using Java `Serializable`. May be unsafe!
source

read-typedclj

(read-typed ibr)
Reads one object as type-prefixed bytes from given `IByteReader`.
source

read-vecclj

(read-vec ibr n)
source

stream-kindclj

(stream-kind _)
Returns this native writer's ?streaming strategy. Registered in parallel
with `IWriteTypedNoMeta` so both use identical protocol dispatch.
source

with-bbclj

(with-bb f)
(with-bb init-size f)
(with-bb init-size f finalize)
(with-bb bb state mark f)
(with-bb bb state mark f finalize)
Executes `(f bb dout_)` and returns ?ba of bb when `f` returns truthy.
  `bb` ---- Auto-expanding `ByteBuffer`. Will reuse ThreadLocal when possible,
            retaining up to 1 MiB per thread for reuse.
  `dout_` - Call (dout_) to get a `DataOutput` view on `bb`.

`finalize` is called on the final (settled) `bb` to produce the return
value, and defaults to copying `bb`'s written bytes to a new ba. Callers
that only need to consume the bytes (e.g. write them to a `DataOutput`)
can pass a custom `finalize` to avoid that copy.
source

write-auto-cached-kwclj

(write-auto-cached-kw bb kw state)
Like `write-cached-kw` but starts caching only on a kw's SECOND
occurrence per session (1st occurrence written plain), so that kws
that never repeat don't pay any caching cost in the output.
source

write-bigintegerclj

(write-biginteger bb n)
source

write-bytesclj

(write-bytes bb ba)
source

write-bytes-lgclj

(write-bytes-lg bb ba)
source

write-bytes-mdclj

(write-bytes-md bb ba)
source

write-bytes-smclj

(write-bytes-sm bb ba)
source

write-bytes-sm*clj

(write-bytes-sm* bb ba)
source

write-cachedclj

(write-cached bb dout_ x-val state)
source

write-cached-header!clj

(write-cached-header! bb x-val state)
Registers `x-val` in the cache and writes its cache ref id.
Returns true iff `x-val` itself must still be written after the id.

Shared by the buffered and streaming writers, so both agree on both the
emitted bytes and the cache idxs they imply. NB the cache mutation happens
here, alongside the id write, so a caller that discards the written bytes
(see `stream-leaf!`) can undo both together.
source

write-cached-kwclj

(write-cached-kw bb kw state)
Like `write-cached` but specialized for cached keywords:
uses bare kw cache keys (kws can't have meta, can't `.equals` the
`[<val> <meta>]` keys used for manually cached vals), and writes kws
directly (avoiding re-dispatch through the `Keyword` writer).
source

write-cached-refclj

(write-cached-ref bb idx)
Writes cache ref id (+ idx payload when idx > 7) for given idx <= 32767.
source

write-collclj

(write-coll bb dout_ id-lg coll)
(write-coll bb dout_ id-empty id-sm id-md id-lg coll)
source

write-coll-headercljmacro

(write-coll-header bb id-0 id-sm id-md id-lg cnt)
Writes coll id + count.
source

write-coll-header*cljmacro

(write-coll-header* bb id-0 id-sm* id-sm_ id-md id-lg cnt)
Writes coll id + count, packing sm counts as unsigned when enabled.
source

write-counted-collclj

(write-counted-coll bb dout_ id-lg coll)
(write-counted-coll bb dout_ id-empty id-sm id-md id-lg coll)
source

write-doubleclj

(write-double bb n)
source

write-dyn-array-lgcljmacro

(write-dyn-array-lg bb dout_ arr alen id)
Writes an array of dynamic (individually type-prefixed) elements.
source

write-idcljmacro

(write-id bb id)
source

write-kvsclj

(write-kvs bb dout_ id-lg coll)
(write-kvs bb dout_ id-empty id-sm id-md id-lg coll)
source

write-kwclj

(write-kw bb kw)
source

write-kw*clj

(write-kw* bb kw state)
Writes given keyword, auto-caching it in the given (current) session.
Takes `state` so that callers writing many keywords
can read `tl:cache` once rather than once per keyword.
source

write-lg-countcljmacro

(write-lg-count bb n)
source

write-longclj

(write-long bb n)
source

write-long-legacyclj

(write-long-legacy bb n)
source

write-mapclj

(write-map bb dout_ m is-metadata?)
Micro-optimized `write-kvs` w/ id-map-0 id-map-sm id-map-md id-map-lg.
source

write-md-countcljmacro

(write-md-count bb n)
source

write-readableclj

(write-readable bb x)
source

write-setclj

(write-set bb dout_ s)
Micro-optimized `write-counted-coll` w/ id-set-0 id-set-sm id-set-md id-set-lg.
source

write-sm-countcljmacro

(write-sm-count bb n)
source

write-sm-ucountcljmacro

(write-sm-ucount bb n)
source

write-strclj

(write-str bb s)
source

write-str-lgclj

(write-str-lg bb s)
source

write-str-mdclj

(write-str-md bb s)
source

write-str-smclj

(write-str-sm bb s)
source

write-str-sm*clj

(write-str-sm* bb s)
source

write-symclj

(write-sym bb sym)
source

write-szclj

(write-sz bb x)
Writes given arg using Java `Serializable`.
Returns true iff allowed.
source

write-typed+metacljmacro

(write-typed+meta x bb dout_)
source

write-typed+meta*cljmacro

(write-typed+meta* x bb dout_ incl-meta?)
Like `write-typed+meta`, but takes a pre-read `*incl-metadata?*`.
source

write-typed+meta-to-out!clj

(write-typed+meta-to-out! dout x)
Streams given object to given `DataOutput`, holding only a small chunk of
its serialized bytes in memory at a time.

Counted colls and `cache`d values stream at every nesting depth, so their
total serialized size is unbounded. Individual values are still buffered in
full, so each is capped at ~2 GiB: strings, byte arrays, uncounted/lazy
seqs, records, deftypes, custom (`extend-freeze`) types, and metadata maps.

NB writes are NOT atomic: on error `dout` may have received partial bytes.
A shared `with-cache` session's cache IS restored though, so a failed write
that flushed nothing (the usual case, since a chunk holds 64 KiB) leaves the
session fully intact.
source

write-uncounted-collclj

(write-uncounted-coll bb dout_ id-lg coll)
(write-uncounted-coll bb dout_ id-empty id-sm id-md id-lg coll)
source

write-vecclj

(write-vec bb dout_ v)
source

cljdoc builds & hosts documentation for Clojure/Script libraries

Keyboard shortcuts
Ctrl+kJump to recent docs
Move to previous article
Move to next article
Ctrl+/Jump to the search field
× close