private static ByteBuffer sliceFromTo(final ByteBuffer source, final int start, final int end) {
        if (start < 0) {
            throw new IllegalArgumentException("start: " + start);
        }
        if (end < start) {
            throw new IllegalArgumentException("end < start: " + end + " < " + start);
        }
        final int capacity = source.capacity();
        if (end > source.capacity()) {
            throw new IllegalArgumentException("end > capacity: " + end + " > " + capacity);
        }
        final int originalLimit = source.limit();
        final int originalPosition = source.position();
        try {
            source.position(0);
            source.limit(end);
            source.position(start);
            final ByteBuffer result = source.slice();
            result.order(source.order());
            return result;
        } finally {
            source.position(0);
            source.limit(originalLimit);
            source.position(originalPosition);
        }
    }
Returns new byte buffer whose content is a shared subsequence of this buffer's content
between the specified start (inclusive) and end (exclusive) positions. As opposed to
{@link ByteBuffer#slice()}, the returned buffer's byte order is the same as the source
buffer's byte order.
common/src/main/java/com/mcxiaoke/packer/support/walle/ApkUtil.java