apache/flink · error · IndexOutOfBoundsException
Byte array does not provide enough space to store requested…
Error message
Byte array does not provide enough space to store requested data.
What it means
Thrown by DataInputDeserializer.read when the destination byte array cannot hold the requested range: b.length - off < len. The guard fires before any data is copied, indicating the caller-supplied buffer is too small for the requested offset/length.
Solutions
- Size the destination array to at least off + len before calling read.
- Use read(byte[]) with a correctly sized array.
- Derive the destination length from the record's declared size, not a fixed constant.
Example fix
// before byte[] dst = new byte[8]; input.read(dst, 0, recordLen); // recordLen > 8 // after byte[] dst = new byte[recordLen]; input.read(dst, 0, recordLen);
Defensive patterns
Strategy: validation
Validate before calling
if (off < 0 || len < 0 || b.length - off < len) {
throw new IndexOutOfBoundsException("dst too small: len=" + len + ", off=" + off + ", cap=" + b.length);
}
input.read(b, off, len); Prevention
- Size the destination array to at least off + len.
- Derive destination length from the record's declared size, not a fixed constant.
- Use read(byte[]) with a correctly sized array when reading the full payload.
When it happens
Trigger: Calling read(b, off, len) where b.length - off < len (e.g. reading 16 bytes into an 8-byte array, or with a large offset that leaves insufficient room).
Common situations: Destination buffer sized too small for the record; an offset that eats into available space; mis-sizing a read buffer relative to the declared record length.
Related errors
- Invalid bounds.
- Length cannot be negative.
- Length may not be negative.
- Offset cannot be negative.
- Could not skip bytes.
AI-assisted analysis of apache/flink@2f3c205e92 (2026-08-14).
Data as JSON: /api/errors/7aec0400424e42dd.
Report an issue: GitHub.
Appendix: source
Thrown at flink-core/src/main/java/org/apache/flink/core/memory/DataInputDeserializer.java:393
if (skippedBytes < numBytes) {
throw new EOFException("Could not skip " + numBytes + " bytes.");
}
}
@Override
public int read(@Nonnull byte[] b, int off, int len) throws IOException {
if (off < 0) {
throw new IndexOutOfBoundsException("Offset cannot be negative.");
}
if (len < 0) {
throw new IndexOutOfBoundsException("Length cannot be negative.");
}
if (b.length - off < len) {
throw new IndexOutOfBoundsException(
"Byte array does not provide enough space to store requested data" + ".");
}
if (this.position >= this.end) {
return len == 0 ? 0 : -1;
} else {
int toRead = Math.min(this.end - this.position, len);
System.arraycopy(this.buffer, this.position, b, off, toRead);
this.position += toRead;
return toRead;
}
}
@Override
public int read(@Nonnull byte[] b) throws IOException {
return read(b, 0, b.length);
}View on GitHub (pinned to 2f3c205e92)