Я создаю приложение Java, которому требуется клиент для связи (Отправить & Получить данные) с другими Клиентами. Я сделал простое серверное приложение, чтобы упростить взаимодействие с клиентами. Для связи, сервер & Клиент использует класс, который я создал с именем «Запрос». Во-первых, я думал, что Simple ObjectOutputStream/InputStream сможет отправить/получить мой объект запроса, и это так! Но я изменил свои планы: Теперь я сериализую свой объект запроса как массив байтов, и я вписываю его в Cipher. Я уже сделал дешифрование & метод десериализации, но я не знаю, как читать массив байтов, соответствующий запросу. После поиска я обнаружил, что, чтобы узнать, сколько байтов я должен прочитать, мне нужно отправить int с байтом array lenth. Я также обнаружил, что существует ByteArrayOuputStream/InputStream, он адаптирован для меня? А как читать/записывать всю совокупность байтового массива? Спасибо! Хорошего дня!Как я могу узнать, что я читаю с помощью Java-сокетов?
-3
A
ответ
1
На передающей стороне, записать длину массива байтов, а затем фактический байтовый массив:
OutputStream os = ...;
byte[] data = ...;
int dataLength = data.length;
os.write(dataLength >> 24);
os.write(dataLength >> 16);
os.write(dataLength >> 8);
os.write(dataLength);
os.write(data);
На приемной стороне, прочитать первые четыре байта, восстановить длину данных, а затем прочитать соответствующее число байтов из входного потока:
InputStream is = ...;
byte[] buf = new byte[4];
is.read(buf);
int dataLength = (buf[0] << 24) + (buf[1] << 16) + (buf[2] << 8) + buf[3];
// read rest of data according to dataLength
Примечание: Приведенные выше фрагменты кода не включают в себя необходимые санитарные проверки!
+0
Спасибо! Отлично работает: D – ByProcyx
Итак, вы нарушили свой дизайн. Так что не делай этого. – EJP
@EJP Что значит? Я просто добавляю шифрование к своим данным и зашифровываю его, я должен сделать его как массив байтов. – ByProcyx