Я создаю приложение чата в Java. Пользователь может отправлять несколько новых строк в одном сообщении. Раньше я не разрешал пользователю отправлять новые строки. Поэтому было легко использовать новый символ линии как End of Message. Но теперь я разрешаю пользователю отправлять новые строки в сообщении. Какой символ/строку следует использовать для обозначения конца сообщения.Приложение для чата. Каким должен быть символ сообщения
ответ
Вы можете легко избежать окончания сообщения, добавив дополнительные 4 байта. Первые 4 байта представляют длину вашего сообщения. Затем добавьте полное сообщение.
Пример кода отправителя:
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(socket.getOutputStream());
String msg = "its a test message";
byte[] byteMsg = msg.getBytes();
int length = byteMsg.length;
byte[] lengthByte = ByteBuffer.allocate(4).putInt(length).array();
byte[] finalMsg = new byte[length+4];
System.arraycopy(lengthByte, 0, finalMsg, 0, 4);
System.arraycopy(byteMsg, 0, finalMsg, 4, length);
bufferedOutputStream.write(finalMsg);
Когда вы читаете сообщение, затем прочитать первые 4 байта. Преобразуйте этот 4 байта в целое число. Это длина вашего входящего сообщения. Затем проанализируйте этот байт.
Это ваше приложение, поэтому вы можете использовать все, что захотите, включая EOF
и NUL
символов, предложенных Марко и KDM.
Просто убедитесь, что это символ, который ваши пользователи не будут использовать в своих сообщениях.
Downvoter, пожалуйста, объясните причину downvote. Поскольку я собираюсь использовать этот метод в моем простом приложении. Я буду использовать более продвинутый метод, например, указать длину сообщения в сообщении, как только демо будет передано. –
Символ ['EOF'] (http://www.fileformat.info/info/unicode/char/0003/index.htm) кажется очень хорошим выбором. –
Символ NUL ('\ 0') выглядит хорошим кандидатом. Еще лучше, если вы можете изменить протокол для отправки длины ввода, за которой следуют фактические байты. – KDM