public boolean readToPOJO(Map<String, POJOFieldDeserializer> deserializers, Object obj ) throws IOException {
        if (columns == null || columns.length == 0) {
            return false;
        }

        boolean firstColumn = true;

        for (ClickHouseColumn column : columns) {
            try {
                POJOFieldDeserializer deserializer = deserializers.get(column.getColumnName());
                if (deserializer != null) {
                    deserializer.setValue(obj, binaryStreamReader, column);
                } else {
                    binaryStreamReader.skipValue(column);
                }
                firstColumn = false;
            } catch (EOFException e) {
                if (firstColumn) {
                    endReached();
                    return false;
                }
                throw e;
            } catch (Exception e) {
                throw new ClientException("Failed to set value of '" + column.getColumnName(), e);
            }
        }
        return true;
    }
Reads next record into POJO object using set of serializers.
There should be a serializer for each column in the record, otherwise it will silently skip a field
It is done in such a way because it is not the reader concern. Calling code should validate this.

Note: internal API
@param deserializers
@param obj
@return
@throws IOException
client-v2/src/main/java/com/clickhouse/client/api/data_formats/internal/AbstractBinaryFormatReader.java