@Override
	protected SubMemoryBlock split(long memBlockOffset)
			throws IndexOutOfBoundsException, IOException {
		// convert from offset in block to offset in this sub block
		int offset = (int) (memBlockOffset - subBlockOffset);
		long newLength = subBlockLength - offset;
		subBlockLength = offset;
		record.setLongValue(MemoryMapDBAdapter.SUB_LENGTH_COL, subBlockLength);
		adapter.updateSubBlockRecord(record);

		DBBuffer split = buf.split(offset);

		DBRecord newSubRecord = adapter.createSubBlockRecord(0, 0, newLength,
			MemoryMapDBAdapter.SUB_TYPE_BUFFER, split.getId(), 0);

		return new BufferSubMemoryBlock(adapter, newSubRecord);
	}
Implementation of SubMemoryBlock for blocks that store bytes in their own private database
buffers
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/BufferSubMemoryBlock.java