public byte[] readNibbleArray() throws IOException
	{
		final int size = this.readInt();
		final int byteCount = ceilDiv(size, 2);

		final byte[] nibbles = new byte[size];
		final byte[] data = new byte[byteCount];

		this.in.read(data);

		for (int nibbleIndex = 0, byteIndex = 0, bitIndex = 1; nibbleIndex < size; nibbleIndex++)
		{
			int l = bitIndex << 2;
			nibbles[nibbleIndex] |= data[byteIndex] >> l & 0xF;
			--bitIndex;

			if (bitIndex < 0)
			{
				byteIndex++;
				bitIndex = 1;
			}
		}
		return nibbles;
	}