Вы можете использовать:
import org.mockito.AdditionalAnswers;
when(submissionService.findSubmission(Mockito.anyLong())).thenAnswer(AdditionalAnswers.returnsElementsOf(Arrays.asList(submission)));
Да, Вы правы - использование available()
как это ненадежно. Лично я очень редко использую available()
. Если Вы хотите читать, пока Вы не достигаете конца поток (согласно заголовку вопроса), продолжайте звонить read()
, пока он не возвращается-1. Это - легкий бит. Твердый бит - то, если Вы не хотите конец потока, но конец, "что сервер хочет отправить Вам в данный момент".
, Как другие сказали, если необходимо разговаривать по сокету, Вы должны заставлять протокол объяснить, где данные заканчиваются. Лично я предпочитаю "решение для" префикса длины "конца маркерного решения для" сообщения, где это возможно - это обычно делает код чтения намного более простым. Однако это может сделать запись код тяжелее, поскольку необходимо разработать длину перед отправкой чего-либо. Это - боль, если Вы могли бы отправлять много данных.
, Конечно, можно смешать и соответствовать решениям - в частности, если протокол имеет дело и с текстом и с двоичными данными, я был бы сильно , рекомендуют снабжающие префиксом длину строки, а не завершение пустого указателя их (или что-либо подобное). Декодирование строковых данных имеет тенденцию быть намного легче, если можно передать декодер полный массив байтов и просто вернуть строку - Вы не должны волноваться о чтении в половину пути через символ, например. Вы могли использовать это в качестве части Вашего протокола, но все еще иметь полные "записи" (или независимо от того, что Вы передаете) с "концом данных" запись, чтобы позволить читателю обработать данные, и ответить.
, Конечно, весь этот материал дизайна протокола спорен, если Вы не контролируете протокол: (
Я думаю, что это - задача больше протокола, предполагая, что Вы - человек, который пишет и передачу и получение сторон приложения. Например, Вы могли реализовать некоторый простой логический протокол и разделить Вас данные на пакеты. Тогда разделите пакеты на две части: голова и тело. И затем сказать, что Ваша голова состоит из предопределенной стартовой последовательности и содержит число байтов в теле. Из забывают о стартовой последовательности и числе передачи simpy байтов в bofy как первый байт пакета. Тогда Вы имеете, мог решить Вас проблема.
как Nikita сказал, что это - больше задачи протокола. Или можно пойти заголовком и подходом тела, или можно отправить специальный символ или символ для конца потока для повреждения цикла обработки. Что-то как то, если Вы отправляете, говорит' [[ЗАКАНЧИВАЮТСЯ]]' на сокете для обозначения конца потока.