Iterator API

The Iterator API provides a simplified, single-threaded alternative to jNetWorks' multi-stream capture. It implements the standard Java Iterator<T> interface, making it familiar and easy to use for developers who don't need high-performance parallel processing.

Overview

jNetWorks offers two capture patterns:

Pattern
API
Use Case

Multi-stream

PacketStream[] with while/take/release

Production, high-speed, parallel

Iterator

NetIterator<T> with hasNext/next/forEach

Development, simple apps, single-threaded

The Iterator pattern is ideal for:

  • Getting started quickly

  • Simple sequential processing

  • Prototyping and debugging

  • Collecting packets to lists or collections

Resource Management

CRITICAL: Each iterator creates a backing capture session. Always use try-with-resources.

// CORRECT - always use try-with-resources
try (NetIterator<Packet> packets = net.packetIterator("tcp", "en0")) {
    packets.forEach(this::process);
}  // Automatically closed

// WRONG - resource leak!
NetIterator<Packet> packets = net.packetIterator("tcp", "en0");
packets.forEach(this::process);
// Session still running!

Creating Iterators

Packet Iterator

Protocol Iterator

Token Iterator

Basic Usage

While Loop

forEach

As Iterable

Convert to Iterable for enhanced for-loop:

Protocol Objects

Process reassembled protocol objects instead of raw packets:

Token Processing

Capture flow events and analysis tokens:

Session Control

Access the backing session for shutdown control:

Graceful Shutdown from Loop

Timed Capture

Collecting Packets

The Iterator API defaults to memory-copy mode, making it safe to collect packets:

Configuration

IteratorSettings

With Protocol Stack

Complete Example

NetIterator Interface

Comparison with Multi-Stream API

Aspect
Multi-Stream
Iterator

Factory

net.createPacketStreams()

net.packetIterator()

Pattern

while/take/release

hasNext/next/forEach

Parallelism

Multiple streams per CPU

Single-threaded

Memory

Zero-copy option

Memory-copy (safe)

Resource release

Explicit release()

Automatic via GC

Session control

Per-stream ClientSession

session() method

Performance

Optimal

Slight overhead

Use case

Production

Development, simple apps

Choose Iterator for simplicity. Choose multi-stream for performance.

Last updated