@haxall/haxall
    Preparing search index...

    Class Buf

    Buf is used to model a block of bytes with random access. Buf is typically backed by a block of memory, but can also be backed by a file:

    Buf provides an InStream and OutStream to read and write into the buffer using a configurable position accessed via Buf.pos and Buf.seek.

    When using an InStream, bytes are read starting at pos where pos is advanced after each read. The end of stream is reached when pos reaches size. When using the OutStream, bytes are written starting at pos with pos advanced after each write. If pos is less then size then the existing bytes are rewritten and size is not advanced, otherwise the buffer is automatically grown and size is advanced as bytes are appended. It is common to write bytes into the buffer using the OutStream, then call Buf.flip to prepare the buffer to be used for reading.

    Memory bufs may be made immutable by calling Obj.toImmutable. When a buf is made immutable, the original buffer's data is cleared (to avoid copying the backing array). All write operations on an immutable buf will raise a ReadonlyErr. Reads may be performed by acquiring an InStream via the in method. However, read operations which require a mutable Buf pos will raise ReadonlyErr too, including methods such as seek or read. Use dup to copy an immutable buf back into a mutable buf.

    Hierarchy (View Summary)

    Index

    Constructors

    Properties

    type$: Type

    Methods

    • Return if the buffer contents are the same size and same bytes. Note this could be an extremely expensive call for non-memory buffers.

      Parameters

      Returns boolean

    • The number of bytes this buffer can hold without allocating more memory. Capacity is always greater or equal to size. If adding a large number of bytes, it may be more efficient to manually set capacity. See the trim method to automatically set capacity to size. Throw ArgErr if attempting to set capacity less than size. This method is ignored on a file buffer, and unsupported on mmap.

      Returns number

    • The number of bytes this buffer can hold without allocating more memory. Capacity is always greater or equal to size. If adding a large number of bytes, it may be more efficient to manually set capacity. See the trim method to automatically set capacity to size. Throw ArgErr if attempting to set capacity less than size. This method is ignored on a file buffer, and unsupported on mmap.

      Parameters

      • it: number

      Returns void

    • Character set for both the OutStream and InStream.

      Returns Charset

    • Character set for both the OutStream and InStream.

      Parameters

      Returns void

    • Read the buffer for a fresh read by reseting the buffer's pos and size to zero. The buffer's capacity remains the same. Return this.

      Returns this

    • If this buffer is backed by a file, then close it. If a memory buffer then do nothing. This method is guaranteed to never throw an IOErr. Return true if the buffer was closed successfully or false if closed abnormally.

      Returns boolean

    • Return a negative integer, zero, or a positive integer if this object is less than, equal to, or greater than the specified object:

      this < that   =>  <0
      this == that => 0
      this > that => >0

      This method may also be accessed via the < <= <=> >= and > shortcut operators. If not overridden the default implementation compares the toStr representations. Also see docLang.

      Examples:

      3.compare(8)  =>  -1
      8.compare(3) => 1
      8.compare(8) => 0
      3 <=> 8 => -1 // shortcut for 3.compare(8)

      Parameters

      Returns number

    • Compute a cycle redundancy check code using this buffer's contents from 0 to size. The supported algorithm names:

      • "CRC-16": also known as CRC-16-ANSI, CRC-16-IBM; used by USB, ANSI X3.28, and Modbus
      • "CRC-32": used by Ethernet, MPEG-2, PKZIP, Gzip, PNG
      • "CRC-32-Adler": used by Zlib

      Raise ArgErr if algorithm is not available. This method is only supported for memory based buffers.

      Parameters

      • algorithm: string

      Returns number

    • Create a new buffer in memory which deeply clones this buffer. The resulting buf is read/write.

      Returns Buf

    • Convenience for in.eachLine

      Parameters

      • f: (arg0: string) => void

      Returns void

    • Byte order mode for both OutStream and InStream. Default is Endian.big (network byte order).

      Returns Endian

    • Byte order mode for both OutStream and InStream. Default is Endian.big (network byte order).

      Parameters

      Returns void

    • Buf equality is based on reference equality using the === operator.

      Parameters

      Returns boolean

    • Write the specified byte to the end of the buffer using given count.

      Examples:

      Buf().fill(0xff, 4)  =>  0xffffffff
      

      Parameters

      • byte: number
      • times: number

      Returns this

    • Flip a buffer from write-mode to read-mode. This method sets total size to current position, and position to 0. Return this.

      Returns this

    • Obsolete call to sync. In the future this method may be relaxed to flush only memory buffers, but not force an fsync.

      Returns this

    • Get the byte at the specified absolute index. A negative index may be used to access from the end of the buffer. For example get(-1) is translated into get(size-1). This method accesses the buffer absolutely independent of current position. The get method is accessed via the [] shortcut operator. Throw IndexErr if index out of range.

      Parameters

      • index: number

      Returns number

    • Return a new buffer containing the bytes in the specified absolute range. Negative indexes may be used to access from the end of the buf. This method accesses the buffer absolutely independent of current position. This method is accessed via the [] operator. Throw IndexErr if range illegal.

      Examples:

      buf := Buf.make
      buf.write(0xaa).write(0xbb).write(0xcc).write(0xdd)
      buf[0..2] => 0x[aabbcc]
      buf[3..3] => 0x[dd]
      buf[-2..-1] => 0x[ccdd]
      buf[0..<2] => 0x[aabb]
      buf[1..-2] => 0x[bbcc]

      Parameters

      Returns Buf

    • Return a unique hashcode for this object. If a class overrides hash() then it must ensure if equals() returns true for any two objects then they have same hash code.

      Returns number

    • Generate an HMAC message authentication as specified by RFC 2104. This buffer is the data input, algorithm specifies the hash digest, and key represents the secret key:

      • H: specified by algorthim parameter - "MD5" or "SHA1"
      • K: secret key specified by key parameter
      • B: fixed at 64
      • text: this instance

      The HMAC is computed using:

      ipad = the byte 0x36 repeated B times
      opad = the byte 0x5C repeated B times
      H(K XOR opad, H(K XOR ipad, text))

      Throw ArgErr if the algorithm is not available. This method is only supported for memory buffers.

      Examples:

      "hi there".toBuf.hmac("MD5", "secret".toBuf)
      

      Parameters

      • algorithm: string
      • key: Buf

      Returns Buf

    • Get the InStream which reads from this buffer. This method always returns the same instance. If this buffer is backed by a file, then in.close will not close the file - you must use Buf.close.

      Returns InStream

    • Return if size() == 0.

      Returns boolean

    • Return if this Obj is immutable and safe to share between threads:

      • an instance of a const class
      • the result of toImmutable on List, Map, or Buf
      • a Func object may or may not be immutable - see sys::Func.
      • other instances are assumed mutable and return false

      Returns boolean

    • Return if more bytes are available to read: remaining() > 0.

      Returns boolean

    • Get the OutStream which writes to this buffer. This method always returns the same instance. If this buffer is backed by a file, then out.close will not close the file - you must use Buf.close.

      Returns OutStream

    • Convenience for in.peek

      Returns number

    • Convenience for in.peekChar

      Returns number

    • Return the current position for the next read or write. The position is always between 0 and size. If pos is less than size then future writes will rewrite the existing bytes without growing size. Change the position with seek.

      Returns number

    • Convenience for out.print Return this.

      Parameters

      Returns this

    • Convenience for out.printLine Return this.

      Parameters

      Returns this

    • Convenience for in.read

      Returns number

    • Convenience for in.readAllBuf

      Returns Buf

    • Convenience for in.readAllLines

      Returns List<string>

    • Convenience for in.readAllStr

      Parameters

      • OptionalnormalizeNewlines: boolean

      Returns string

    • Convenience for in.readBool

      Returns boolean

    • Convenience for in.readBuf

      Parameters

      • buf: Buf
      • n: number

      Returns number

    • Convenience for in.readBufFully

      Parameters

      • buf: Buf
      • n: number

      Returns Buf

    • Convenience for in.readChar

      Returns number

    • Convenience for in.readChars

      Parameters

      • n: number

      Returns string

    • Convenience for in.readDecimal

      Returns number

    • Convenience for in.readF4

      Returns number

    • Convenience for in.readF8

      Returns number

    • Convenience for in.readLine

      Parameters

      • Optionalmax: number

      Returns string

    • Convenience for in.readObj

      Parameters

      Returns JsObj

    • Convenience for in.readProps

      Returns Map<string, string>

    • Convenience for in.readS1

      Returns number

    • Convenience for in.readS2

      Returns number

    • Convenience for in.readS4

      Returns number

    • Convenience for in.readS8

      Returns number

    • Convenience for in.readStrToken

      Parameters

      • Optionalmax: number
      • Optionalc: (arg0: number) => boolean

      Returns string

    • Convenience for in.readU1

      Returns number

    • Convenience for in.readU2

      Returns number

    • Convenience for in.readU4

      Returns number

    • Convenience for in.readUtf

      Returns string

    • Return the remaining number of bytes to read: size-pos.

      Returns number

    • Set the current position to the specified byte offset. A negative index may be used to access from the end of the buffer. For example seek(-1) is translated into seek(size-1). Return this.

      Parameters

      • pos: number

      Returns this

    • Set is used to overwrite the byte at the specified index. A negative index may be used to access an index from the end of the buffer. The set method is accessed via the []= shortcut operator. Return this. Throw IndexErr if index is out of range.

      Parameters

      • index: number
      • byte: number

      Returns this

    • Return the total number of bytes in the buffer. If the size is set greater than capacity then the buffer's capacity is automatically grown, otherwise capacity remains the same. Setting size does not actually change any bytes in the buffer. A mmap buffer can never be increased from its initial size.

      Returns number

    • Return the total number of bytes in the buffer. If the size is set greater than capacity then the buffer's capacity is automatically grown, otherwise capacity remains the same. Setting size does not actually change any bytes in the buffer. A mmap buffer can never be increased from its initial size.

      Parameters

      • it: number

      Returns void

    • If this Buf is backed by a file, then fsync all changes to the storage device. Throw IOErr on error. Return this.

      Returns this

    • Encode the buffer contents from 0 to size to a Base64 string as defined by MIME RFC 2045. No line breaks are added. This method is only supported by memory-backed buffers; file-backed buffers will throw UnsupportedErr.

      Example:

      Buf.make.print("Fan").toBase64    => "RmFu"
      Buf.fromBase64("RmFu").readAllStr => "Fan"

      Returns string

    • Encode the buffer contents from 0 to size to a Uri-safe Base64 string as defined by RFC 4648. This means + is encoded as -, and / is encoded as _. Additionally, no padding is applied. This method is only supported by memory-backed buffers; file-backed buffers will throw UnsupportedErr.

      Example:

      Buf.make.print("safe base64~~").toBase64    => "c2FmZSBiYXNlNjR+fg=="
      Buf.make.print("safe base64~~").toBase64Uri => "c2FmZSBiYXNlNjR-fg"

      Returns string

    • Apply the specified message digest algorithm to this buffer's contents from 0 to size and return the resulting hash. Digests are secure one-way hash functions which input an arbitrary sized buffer and return a fixed sized buffer. Common algorithms include: "MD5", "SHA-1", and "SHA-256"; the full list supported is platform dependent. On the Java VM, the algorithm maps to those available via the java.security.MessageDigest API. Throw ArgErr if the algorithm is not available. This method is unsupported for mmap buffers.

      Example:

      Buf.make.print("password").print("salt").toDigest("MD5").toHex
      => "b305cadbb3bce54f3aa59c64fec00dea"

      Parameters

      • algorithm: string

      Returns Buf

    • Create an in-memory File instance for this buffer with the given file URI. The buffer must be a RAM based buffer which is converted to an immutable buffer via Obj.toImmutable semantics. The current time is used for the file's modified time.

      Parameters

      Returns File

    • Encode the buffer contents from 0 to size into a hexadecimal string. This method is unsupported for mmap buffers.

      Example:

      Buf.make.print("\r\n").toHex   => "0d0a"
      Buf.fromHex("0d0a").readAllStr => "\r\n"

      Returns string

    • Get an immutable representation of this instance or throw NotImmutableErr if this object cannot be represented as an immutable:

      • if type is const, return this
      • if already an immutable List, Map, Buf, or Func return this
      • if a List, then attempt to perform a deep clone by calling toImmutable on all items
      • if a Map, then attempt to perform a deep clone by calling toImmutable on all values (keys are already immutable)
      • some Funcs can be made immutable - see sys::Func
      • if a Buf create immutable copy, see sys::Buf
      • any other object throws NotImmutableErr

      Returns Readonly<this>

    • Return string summary of the buffer.

      Returns string

    • Trap a dynamic call for handling. Dynamic calls are invoked with the -> shortcut operator:

      a->x        a.trap("x", null)
      a->x() a.trap("x", null)
      a->x = b a.trap("x", [b])
      a->x(b) a.trap("x", [b])
      a->x(b, c) a.trap("x", [b, c])

      The default implementation provided by Obj attempts to use reflection. If name maps to a method, it is invoked with the specified arguments. If name maps to a field and args.size is zero, get the field. If name maps to a field and args.size is one, set the field and return args[0]. Otherwise throw UnknownSlotErr.

      Parameters

      Returns JsObj

    • Trim the capacity such that the underlying storage is optimized for the current size. Return this.

      Returns this

    • Get the Type instance which represents this object's class. Also seeType.of or Pod.of.

      Returns Type

    • Convenience for in.unread Memory backed buffers support a stack based pushback model like IO streams. File backed buffers will simply rewrite the last position in the file. Return this.

      Parameters

      • b: number

      Returns this

    • Convenience for in.unreadChar Memory backed buffers support a stack based pushback model like IO streams. File backed buffers will simply rewrite the last position in the file. Return this.

      Parameters

      • b: number

      Returns this

    • This method called whenever an it-block is applied to an object. The default implementation calls the function with this, and then returns this.

      Parameters

      • f: (arg0: this) => void

      Returns this

    • Convenience for out.write Return this.

      Parameters

      • byte: number

      Returns this

    • Convenience for out.writeBool Return this.

      Parameters

      • b: boolean

      Returns this

    • Convenience for out.writeBuf Return this.

      Parameters

      • buf: Buf
      • Optionaln: number

      Returns this

    • Convenience for out.writeChar Return this.

      Parameters

      • char: number

      Returns this

    • Convenience for out.writeChars Return this.

      Parameters

      • str: string
      • Optionaloff: number
      • Optionallen: number

      Returns this

    • Convenience for out.writeDecimal Return this.

      Parameters

      • d: number

      Returns this

    • Convenience for out.writeF4 Return this.

      Parameters

      • r: number

      Returns this

    • Convenience for out.writeF8 Return this.

      Parameters

      • r: number

      Returns this

    • Convenience for out.writeI2 Return this.

      Parameters

      • n: number

      Returns this

    • Convenience for out.writeI4 Return this.

      Parameters

      • n: number

      Returns this

    • Convenience for out.writeI8 Return this.

      Parameters

      • n: number

      Returns this

    • Convenience for out.writeObj Return this.

      Parameters

      Returns this

    • Convenience for out.writeProps Return this.

      Parameters

      • props: Map<string, string>

      Returns this

    • Convenience for out.writeUtf Return this.

      Parameters

      • s: string

      Returns this

    • Convenience for out.writeXml Return this.

      Parameters

      • s: string
      • Optionalflags: number

      Returns this

    • Write x.toStr to standard output followed by newline. If x is null then print "null". If no argument is provided then print an empty line.

      Parameters

      Returns void

    • Decode the specified Base64 string into its binary contents. Both MIME RFC 2045 and URI-safe RFC 4648 encodings are supported. Any characters which are not included in the Base64 character set are safely ignored.

      Example:

      Buf.make.print("Fan").toBase64    => "RmFu"
      Buf.fromBase64("RmFu").readAllStr => "Fan"

      Parameters

      • s: string

      Returns Buf

    • Decode the specified hexadecimal string into its binary contents. Any characters which are not included in the set "0-9, a-f, A-F" are ignored as long as they appear between bytes (hi and lo nibbles must be contiguous).

      Example:

      Buf.make.print("\r\n").toHex   => "0d0a"
      Buf.fromHex("0d0a").readAllStr => "\r\n"

      Parameters

      • s: string

      Returns Buf

    • Allocate a byte buffer in RAM with the initial given capacity.

      Parameters

      • Optionalcapacity: number
      • ...args: unknown[]

      Returns Buf

    • Generate a password based cryptographic key. Supported algorithms:

      • "PBKDF2WithHmacSHA1"
      • "PBKDF2WithHmacSHA256"

      Parameters:

      • password: secret used to generate resulting cryptographic key
      • salt: cryptographic salt
      • iterations: number of iterations (the c term)
      • keyLen: desired length of key in bytes (not bits!)

      Throw ArgErr if the algorithm is not available. This method is only supported for memory buffers.

      Parameters

      • algorithm: string
      • password: string
      • salt: Buf
      • iterations: number
      • keyLen: number

      Returns Buf

    • Generate a random series of bytes.

      Example:

      Buf.random(8).toHex  => "d548b54989028b90"
      

      Parameters

      • size: number

      Returns Buf