// Path: src/main/java/com/hyd/ssdb/util/IdScore.java
// public class IdScore {
// 
//     private String id;
// 
//     private long score;
// 
//     public IdScore() {
//     }
// 
//     public IdScore(String id, long score) {
//         this.id = id;
//         this.score = score;
//     }
// 
//     public String getId() {
//         return id;
//     }
// 
//     public void setId(String id) {
//         this.id = id;
//     }
// 
//     public long getScore() {
//         return score;
//     }
// 
//     public void setScore(long score) {
//         this.score = score;
//     }
// 
//     @Override
//     public String toString() {
//         return "IdScore{" +
//                 "id='" + id + '\'' +
//                 ", score=" + score +
//                 '}';
//     }
// }
// 
// Path: src/main/java/com/hyd/ssdb/util/KeyValue.java
// public class KeyValue {
// 
//     private Charset charset;
// 
//     private byte[] key;
// 
//     private byte[] value;
// 
//     public KeyValue(byte[] key, byte[] value, Charset charset) {
//         this.key = key;
//         this.value = value;
//         this.charset = charset;
//     }
// 
//     public KeyValue(String key, byte[] value, Charset charset) {
//         this((charset == null? key.getBytes(): key.getBytes(charset)), value, charset);
//     }
// 
//     public KeyValue(String key, String value) {
//         this(key, value, AbstractClient.DEFAULT_CHARSET);
//     }
// 
//     public KeyValue(String key, String value, Charset charset) {
//         this(key.getBytes(charset), value.getBytes(charset), charset);
//     }
// 
//     public byte[] getKey() {
//         return key;
//     }
// 
//     public String getKeyString() {
//         return this.charset == null? new String(this.key) :  new String(this.key, this.charset);
//     }
// 
//     public void setKey(byte[] key) {
//         this.key = key;
//     }
// 
//     public byte[] getValue() {
//         return value;
//     }
// 
//     public String getValueString() {
//         return new String(this.value, this.charset);
//     }
// 
//     public void setValue(byte[] value) {
//         this.value = value;
//     }
// }


import com.hyd.ssdb.conf.*;
import com.hyd.ssdb.conn.*;
import com.hyd.ssdb.protocol.*;
import com.hyd.ssdb.util.IdScore;
import com.hyd.ssdb.util.KeyValue;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.*;
import org.slf4j.LoggerFactory;

     * @return 新生成的数组
     */
    protected String[] prependCommand(String token1, String token2, String[] parameters) {
        String[] command = new String[parameters.length + 2];
        command[0] = token1;
        command[1] = token2;
        System.arraycopy(parameters, 0, command, 2, parameters.length);
        return command;
    }

    // 将 token1，token2 和 parameters 组合成一个字符串数组
    protected String[] prependCommand(String token1, String token2, List<String> parameters) {
        return prependCommand(token1, token2, parameters.toArray(new String[0]));
    }

    // 将 token1，token2 和 keyValues 组合成一个字符串数组
    protected String[] prependCommandKeyValue(String token1, String token2, List<KeyValue> keyValues) {
        String[] command = new String[keyValues.size() * 2 + 2];
        command[0] = token1;
        command[1] = token2;

        for (int i = 0; i < keyValues.size(); i++) {
            KeyValue keyValue = keyValues.get(i);
            command[i * 2 + 2] = keyValue.getKeyString();
            command[i * 2 + 3] = keyValue.getValueString();
        }
        return command;
    }

    // 将 token1，token2 和 idScores 组合成一个字符串数组

// Path: src/main/java/com/hyd/ssdb/util/IdScore.java
// public class IdScore {
// 
//     private String id;
// 
//     private long score;
// 
//     public IdScore() {
//     }
// 
//     public IdScore(String id, long score) {
//         this.id = id;
//         this.score = score;
//     }
// 
//     public String getId() {
//         return id;
//     }
// 
//     public void setId(String id) {
//         this.id = id;
//     }
// 
//     public long getScore() {
//         return score;
//     }
// 
//     public void setScore(long score) {
//         this.score = score;
//     }
// 
//     @Override
//     public String toString() {
//         return "IdScore{" +
//                 "id='" + id + '\'' +
//                 ", score=" + score +
//                 '}';
//     }
// }
// 
// Path: src/main/java/com/hyd/ssdb/util/KeyValue.java
// public class KeyValue {
// 
//     private Charset charset;
// 
//     private byte[] key;
// 
//     private byte[] value;
// 
//     public KeyValue(byte[] key, byte[] value, Charset charset) {
//         this.key = key;
//         this.value = value;
//         this.charset = charset;
//     }
// 
//     public KeyValue(String key, byte[] value, Charset charset) {
//         this((charset == null? key.getBytes(): key.getBytes(charset)), value, charset);
//     }
// 
//     public KeyValue(String key, String value) {
//         this(key, value, AbstractClient.DEFAULT_CHARSET);
//     }
// 
//     public KeyValue(String key, String value, Charset charset) {
//         this(key.getBytes(charset), value.getBytes(charset), charset);
//     }
// 
//     public byte[] getKey() {
//         return key;
//     }
// 
//     public String getKeyString() {
//         return this.charset == null? new String(this.key) :  new String(this.key, this.charset);
//     }
// 
//     public void setKey(byte[] key) {
//         this.key = key;
//     }
// 
//     public byte[] getValue() {
//         return value;
//     }
// 
//     public String getValueString() {
//         return new String(this.value, this.charset);
//     }
// 
//     public void setValue(byte[] value) {
//         this.value = value;
//     }
// }


// Path: src/main/java/com/hyd/ssdb/AbstractClient.java
import com.hyd.ssdb.conf.*;
import com.hyd.ssdb.conn.*;
import com.hyd.ssdb.protocol.*;
import com.hyd.ssdb.util.IdScore;
import com.hyd.ssdb.util.KeyValue;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.*;
import org.slf4j.LoggerFactory;

     * @return 新生成的数组
     */
    protected String[] prependCommand(String token1, String token2, String[] parameters) {
        String[] command = new String[parameters.length + 2];
        command[0] = token1;
        command[1] = token2;
        System.arraycopy(parameters, 0, command, 2, parameters.length);
        return command;
    }

    // 将 token1，token2 和 parameters 组合成一个字符串数组
    protected String[] prependCommand(String token1, String token2, List<String> parameters) {
        return prependCommand(token1, token2, parameters.toArray(new String[0]));
    }

    // 将 token1，token2 和 keyValues 组合成一个字符串数组
    protected String[] prependCommandKeyValue(String token1, String token2, List<KeyValue> keyValues) {
        String[] command = new String[keyValues.size() * 2 + 2];
        command[0] = token1;
        command[1] = token2;

        for (int i = 0; i < keyValues.size(); i++) {
            KeyValue keyValue = keyValues.get(i);
            command[i * 2 + 2] = keyValue.getKeyString();
            command[i * 2 + 3] = keyValue.getValueString();
        }
        return command;
    }

    // 将 token1，token2 和 idScores 组合成一个字符串数组

    protected String[] prependCommandIdScore(String token1, String token2, List<IdScore> idScores) {
