private Object process(final RedisInputStream is, boolean stringsOnly) {
        try {
            byte b = is.readByte();
            if (b == MINUS_BYTE) {
                processError(is);
            } else if (b == ASTERISK_BYTE) {
                return processMultiBulkReply(is, stringsOnly);
            } else if (b == COLON_BYTE) {
                return processInteger(is);
            } else if (b == DOLLAR_BYTE) {
                if (stringsOnly) {
                    return processBulkReply(is);
                }
                return processBinaryBulkReply(is);
            } else if (b == PLUS_BYTE) {
                return processStatusCodeReply(is);
            } else {
                throw new RedisException("Unknown reply: " + (char) b);
            }
        } catch (IOException e) {
            throw new RedisException(e);
        }
        return null;
    }