docs / stdlib / io / net

Stdlib index
  1. Overview
  1. Captured-borrow migration worklist (3.3.3)
  2. Owned-bind migration worklist (8.2.7)
  3. Return-side title audit — the ride-through enumeration
  4. stdlib ownership audit
  5. stdlib ownership dispositions (plan 1.3.1 / 4.3.1)

aot

  1. Components
  2. Scope
  3. Scoped

codec

  1. Base32
  2. Base64

codec / csv

  1. Csv

codec / json

  1. Json

collection

  1. ArrayList
  2. BPlusTree
  3. Cache
  4. Collectors
  5. HashMap
  6. HashSet
  7. Heap
  8. ImmutableList
  9. ImmutableMap
  10. ImmutableSet
  11. LinkedList
  12. RedBlackTree
  13. Sort

collection / ltm

  1. LtmBPlusTree

concurrent

  1. AtomicInt32
  2. AtomicInt64
  3. Channel
  4. Fiber
  5. FiberLocal
  6. Lock
  7. Mutex
  8. RwLock
  9. Semaphore
  10. Tasks

error

  1. Exception
  2. NoOptionalValueException
  3. NotProvidedException
  4. RecoverableException
  5. ScopedBuildFailedException
  6. ScopeNotActiveException
  7. Throwable
  8. UnrecoverableException

gfx

  1. Sampler
  2. Texture2D

hash

  1. DefaultHasher
  2. Hash
  3. SipHash
  4. XXHash3

ifx

  1. BackendRegistry
  2. Window

io

  1. Buffer

io / file

  1. File
  2. FileInfo
  3. FileReader
  4. FileWriter
  5. Path
  6. Watcher

io / net

  1. BufferPool
  2. ByteBuffer
  3. IpAddress
  4. Server
  5. ServerBuilder
  6. SocketAddress
  7. TcpListener
  8. TcpStream
  9. UdpSocket

io / net / dns

  1. Dns

io / net / uri

  1. Uri
  2. UriBuilder

lang

  1. Guid
  2. Math
  3. Optional
  4. Pair
  5. Slice
  6. String
  7. StringBuilder

lang / stream

  1. ArrayStream
  2. Stream

math

  1. Camera
  2. Color
  3. DType
  4. Ray
  5. Rotation
  6. Tensor
  7. Transform

math / fft

  1. Fft

math / linalg

  1. LinAlg

math / npio

  1. Npy

math / poly

  1. Poly

math / random

  1. Generator

math / stats

  1. Stats

nucleo

  1. Columns — the Arrow-laid-out substrate
  2. Fused tensor expressions — Fuse
  3. Table — the lazy, typed dataframe
  4. Tape — define-by-run autograd
  5. Transform intrinsics — Grad, Vmap, Jit

process

  1. Command
  2. Process

reflect

  1. Class

search / distance

  1. Distance

search / fuzzy

  1. Matcher

search / ngram

  1. Index

session

  1. PackageInstallException
  2. Packages

time

  1. Clock
  2. DateTimeFormatter
  3. Duration
  4. Instant
  5. LocalDate
  6. LocalDateTime
  7. LocalTime
  8. Period
  9. ZonedDateTime
  10. ZoneId
  11. ZoneOffset

wire

  1. Compressor
  2. CompressStream
  3. DecompressionLimitException
  4. Decompressor
  5. Encoder
  6. Schema
  7. SchemaEncoder

xpu

  1. Device
  2. KernelBuffer
  3. KernelStream
  4. KernelTimer

xpu / mesh

  1. MeshSimplifier

ByteBuffer

cajeta.io.net.ByteBuffer — the pooled byte buffer with independent read and write cursors. Three regions over one backing array: consumed [0, readPos), readable [readPos, writePos) and writable [writePos, capacity). A parser fills the writable tail from a channel, scans the readable region in place, and advances the read cursor past what it consumed. When the readable region drains, compact or clear reopens the writable region from the front. A buffer is held by one fiber at a time, so it has no lock.

ByteBuffer b = heap ByteBuffer(4096);
int8[] head = heap int8[3];
head[0] = (int8) 71; head[1] = (int8) 69; head[2] = (int8) 84;
int32 w = b.write(head, 0, 3);
int8 first = b.at(b.readPosition());    // scan in place: 71, the G of GET
b.advanceRead(3);                       // consumed; readable() is 0 again

Over a connection the same buffer is filled and drained without a copy:

int32 got = b.fillAsync(conn);          // socket bytes land in the writable tail
b.writeToAsync(conn);                   // the readable region, one write

Methods

Signature
ByteBuffer(int32 capacity)A buffer with capacity writable bytes and both cursors at the front
int32 capacity() / int32 readable() / int32 writable()Sizes of the whole store, the readable region, the writable region
int32 readPosition() / int32 writePosition()The two cursors
int8 at(int32 i)The byte at absolute index i, unchecked
int8[] array()The backing store, a borrow; index it with the cursors. It is replaced when reserve grows the buffer
boolean put(int8 b)Append one byte; false when the writable region is full
int32 write(int8[] src, int32 srcOff, int32 len)Copy into the writable region; returns the count that fit
int32 read(int8[] dst, int32 dstOff, int32 len)Copy out of the readable region and consume it
int32 fillAsync(ByteChannel ch)One channel read straight into the writable tail, parking the fiber; returns the count, 0 at EOF or when nothing is writable, in which case the channel is not touched
int32 fillWithin(ByteChannel ch, int32 timeoutMs)The same under a deadline. Raises TimedOutException when it elapses
void writeToAsync(ByteChannel ch)Send the readable region in one write and consume it; nothing readable means no write
void advanceWrite(int32 n) / void advanceRead(int32 n)Move a cursor after filling or scanning in place, clamped to the region
void compact()Slide the readable bytes to the front so the writable region reopens
void clear()Both cursors to the front, content discarded, store kept
void reserve(int32 minWritable)Compact, then grow the store only if that is not enough

See also

Source: docs/stdlib/io/net/ByteBuffer.md · 2 min read · 410 words