@Override
    protected List<ClickHouseColumn> readColumns() throws IOException {
        if (input.available() < 1) {
            input.close();
            return Collections.emptyList();
        } else if (!config.getFormat().hasHeader()) {
            return Collections.emptyList();
        }

        int size = input.readVarInt();
        String[] names = new String[ClickHouseChecker.between(size, "size", 0, Integer.MAX_VALUE)];
        for (int i = 0; i < size; i++) {
            names[i] = input.readUnicodeString();
        }

        ClickHouseRenameMethod m = config.getColumnRenameMethod();
        List<ClickHouseColumn> columns = new ArrayList<>(size);
        for (int i = 0; i < size; i++) {
            columns.add(ClickHouseColumn.of(m.rename(names[i]), input.readUnicodeString()));
        }

        return columns;
    }
Data processor for handling {@link ClickHouseFormat#RowBinary} and
{@link ClickHouseFormat#RowBinaryWithNamesAndTypes} two formats.
clickhouse-data/src/main/java/com/clickhouse/data/format/ClickHouseRowBinaryProcessor.java