public ByteBuffer read(int offset, int length)
		throws IllegalArgumentException, IllegalStateException, IOException {
		if (!this.valid) {
			throw new IllegalStateException("Attempting to read an " +
					"known-to-be invalid piece!");
		}

		if (offset + length > this.length) {
			throw new IllegalArgumentException("Offset + length goes " +
					"pass the piece size!");
		}

		return this.bucket.read(this.offset + offset, length);
	}