public static byte[][] split(byte[] source, byte[] separator, int limit) {
        List<Range> segments = splitRanges(source, separator, limit);

        byte[][] splits = new byte[segments.size()][];
        for (int i = 0; i < segments.size(); i++) {
            Range r = segments.get(i);
            byte[] tmp = new byte[r.length()];
            if (tmp.length > 0) {
                System.arraycopy(source, r.start(), tmp, 0, r.length());
            }
            splits[i] = tmp;
        }
        return splits;
    }
Splits the source array into multiple array segments using the given separator, up to a
maximum of count items. This will naturally produce copied byte arrays for each of the split
segments. To identify the split ranges without the array copies, see {@link
ByteUtil#splitRanges(byte[], byte[])}.
inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/utils/ByteUtil.java