2013-04-08 2 views
-1

Мне нужно установить терминатор в мою строку. Терминатор может быть байтом 11 (или 0x0B) или любым другим в будущем. Каков наилучший способ добавить байт в мою строку?Создать строковый двоичный терминатор

Я хотел бы сделать что-то вроде:

String s = "122456"+char(11); 
+7

Зачем вам нужно установить терминатор в строку? Это похоже на [xy-problem] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) – ddmps

+0

Что нужно для терминатора в java 'String'? – kaysush

+0

Мне нужно отправить эту строку в com-порт. И для протокола требуется специальный терминатор (и разделители полей). – vico

ответ

0

В Java, вы должны использовать константу для этого. Попробуйте

public final static char TERMINATOR = 0x0B; 

Вы можете использовать его как это в коде:

"122456" + TERMINATOR 

Это делает код читабельным и это также позволяет легко заменить терминатор с другим символом (не в вашем случае но вообще) или найти все места, где используется символ.

Если вам нужен терминатор быть переменными, используйте поле и аксессор методу:

private char terminator = 0x0b; 
public void setTerminator(char terminator) { this.terminator = terminator; } 
public char getTerminator() { return terminator; } 

Это позволяет изменить терминатор.

Я также предлагаю создать единый тип Java для каждого сообщения, которое вы планируете отправить. Тип должен знать, как создать массив байтов, который затем можно передать с помощью «службы IO». Таким образом, создать методы доступа для каждой части сообщения, а затем один encode() метода:

public byte[] encode() { 
    String message = data1 + terminator + data2 + terminator + ... 

    return message.getBytes("ISO-88591-1"); 
} 

Таким образом, вы можете построить шаг за шагом сообщение, а затем преобразовать его в поток байт, чтобы отправить один раз его завершение.

+0

Но мне нужно иметь терминатор, как переменная – vico

+0

. Затем сделайте это свойство (= поле) класса и добавьте геттер + сеттер. Вы можете использовать «122456» + (char) 0x0b' или «122456 \ u000b», но в будущем это будет очень сложно заменить другим персонажем. –

+0

@ user1501700 Нет, вы этого не сделаете. Вы используете фиксированный протокол, а протокол имеет фиксированные терминаторы. В противном случае это не протокол. – EJP

Смежные вопросы