docs: public static NDArrayMessage fromBuffer(DirectBuffer buffer, int offset) {
          //skip the message opType
          Pair<INDArray, ByteBuffer> pair = AeronNDArraySerde.toArrayAndByteBuffer(buffer, offset + 4);
          INDArray arr = pair.getKey();
          Nd4j.getCompressor().decompressi(arr);
          //use the rest of the buffer, of note here the offset is already set, we should only need to use
          ByteBuffer rest = pair.getRight();
          long time = rest.getLong();
          long index = rest.getLong();
          //get the array next for dimensions
          int dimensionLength = rest.getInt();
          if (dimensionLength <= 0)
              throw new IllegalArgumentException("Invalid dimension length " + dimensionLength);
          int[] dimensions = new int[dimensionLength];
          for (int i = 0; i < dimensionLength; i++)
              dimensions[i] = rest.getInt();
          return NDArrayMessage.builder().sent(time).arr(arr).index(index).dimensions(dimensions).build();
      }