Что делает 'конец потока', означают при работе с сокетами

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

import org.mockito.AdditionalAnswers;

when(submissionService.findSubmission(Mockito.anyLong())).thenAnswer(AdditionalAnswers.returnsElementsOf(Arrays.asList(submission)));
19
задан Community 23 May 2017 в 12:03
поделиться

3 ответа

Да, Вы правы - использование available() как это ненадежно. Лично я очень редко использую available(). Если Вы хотите читать, пока Вы не достигаете конца поток (согласно заголовку вопроса), продолжайте звонить read(), пока он не возвращается-1. Это - легкий бит. Твердый бит - то, если Вы не хотите конец потока, но конец, "что сервер хочет отправить Вам в данный момент".

, Как другие сказали, если необходимо разговаривать по сокету, Вы должны заставлять протокол объяснить, где данные заканчиваются. Лично я предпочитаю "решение для" префикса длины "конца маркерного решения для" сообщения, где это возможно - это обычно делает код чтения намного более простым. Однако это может сделать запись код тяжелее, поскольку необходимо разработать длину перед отправкой чего-либо. Это - боль, если Вы могли бы отправлять много данных.

, Конечно, можно смешать и соответствовать решениям - в частности, если протокол имеет дело и с текстом и с двоичными данными, я был бы сильно , рекомендуют снабжающие префиксом длину строки, а не завершение пустого указателя их (или что-либо подобное). Декодирование строковых данных имеет тенденцию быть намного легче, если можно передать декодер полный массив байтов и просто вернуть строку - Вы не должны волноваться о чтении в половину пути через символ, например. Вы могли использовать это в качестве части Вашего протокола, но все еще иметь полные "записи" (или независимо от того, что Вы передаете) с "концом данных" запись, чтобы позволить читателю обработать данные, и ответить.

, Конечно, весь этот материал дизайна протокола спорен, если Вы не контролируете протокол: (

24
ответ дан 30 November 2019 в 03:34
поделиться

Я думаю, что это - задача больше протокола, предполагая, что Вы - человек, который пишет и передачу и получение сторон приложения. Например, Вы могли реализовать некоторый простой логический протокол и разделить Вас данные на пакеты. Тогда разделите пакеты на две части: голова и тело. И затем сказать, что Ваша голова состоит из предопределенной стартовой последовательности и содержит число байтов в теле. Из забывают о стартовой последовательности и числе передачи simpy байтов в bofy как первый байт пакета. Тогда Вы имеете, мог решить Вас проблема.

7
ответ дан 30 November 2019 в 03:34
поделиться

как Nikita сказал, что это - больше задачи протокола. Или можно пойти заголовком и подходом тела, или можно отправить специальный символ или символ для конца потока для повреждения цикла обработки. Что-то как то, если Вы отправляете, говорит' [[ЗАКАНЧИВАЮТСЯ]]' на сокете для обозначения конца потока.

2
ответ дан 30 November 2019 в 03:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: