@Override
	public synchronized short getShort(int offset) throws IndexOutOfBoundsException, IOException {
		int bufferOffset = dataBaseOffset + (offset % dataSpace);
		if (bufferOffset + 1 <= dataSpace) {
			if (dataBufferIdTable == null) {
				throw new AssertException("Invalid Buffer");
			}
			if (offset < 0 || (offset + 1) >= size) {
				throw new IndexOutOfBoundsException();
			}
			int index = offset / dataSpace;
			int id = dataBufferIdTable[index];
			if (id < 0) {
				if (uninitializedDataSource != null) {
					return uninitializedDataSource.getShort(uninitializedDataSourceOffset + offset);
				}
				return 0;
			}
			DataBuffer buffer = bufferMgr.getBuffer(id);
			short value = buffer.getShort(bufferOffset);
			bufferMgr.releaseBuffer(buffer);
			if (useXORMask) {
				value = (short) (value ^ (int) getXorMask(offset % dataSpace, 2));
			}
			return value;
		}
		byte[] data = get(offset, 2);
		return (short) (((data[0] & 0xff) << 8) | (data[1] & 0xff));
	}
Get byte data from the specified chained buffer.
@param offset ChainedBuffer offset (needed for uninitialized buffer pass-through)
@param index buffer index within chain
@param bufferDataOffset data offset within specified buffer
@param data destination byte array
@param dataOffset destination array offset within data
@param length number of bytes to read
@return int actual number of byte read.
This could be smaller than length if the end of buffer is 
encountered while reading data.
@throws IndexOutOfBoundsException if an invalid offset, dataOffset, or length is specified.
@throws IOException thrown if IO error occurs
Ghidra/Framework/DB/src/main/java/db/ChainedBuffer.java