static List tokenize()

in mantis-common/src/main/java/io/mantisrx/common/compression/CompressionUtils.java [207:262]


    static List<MantisServerSentEvent> tokenize(BufferedReader bf, String delimiter) throws IOException {
        StringBuilder sb = new StringBuilder();
        String line;
        List<MantisServerSentEvent> msseList = new ArrayList<>();
        final int delimiterLength = delimiter.length();
        char[] delimiterArray = delimiter.toCharArray();

        int delimiterCount = 0;
        while ((line = bf.readLine()) != null) {
            // Consider replacing this whole thing with just String.indexOf
            for (int i = 0; i < line.length(); i++) {
                if (line.charAt(i) != delimiterArray[delimiterCount]) {
                    if (delimiterCount > 0) {
                        boolean prefixMatch = true;
                        for (int j = delimiterCount - 1; j >= 0; j--) {
                            if (line.charAt(i) != delimiterArray[j]) {
                                prefixMatch = false;
                                break;
                            }
                        }
                        if (!prefixMatch) {
                            for (int j = 0; j < delimiterCount; ++j) {
                                sb.append(delimiterArray[j]);
                            }
                            delimiterCount = 0;
                        }
                    }
                    if (line.charAt(i) != delimiterArray[delimiterCount]) {
                        sb.append(line.charAt(i));
                    } else {
                        delimiterCount++;
                    }
                } else {
                    delimiterCount++;
                }

                if (delimiterCount == delimiterLength) {
                    msseList.add(new MantisServerSentEvent(sb.toString()));
                    delimiterCount = 0;
                    sb = new StringBuilder();
                }
            }
        }

        // We have a trailing event.
        if (sb.length() > 0) {
            // We had a partial delimiter match which was not in the builder.
            if (delimiterCount > 0) {
                for (int j = 0; j < delimiterCount; ++j) {
                    sb.append(delimiter.charAt(j));
                }
            }
            msseList.add(new MantisServerSentEvent(sb.toString()));
        }
        return msseList;
    }