Если один входной поток должен быть прочитан несколькими потребителями, и входной поток является эфемерным (то есть не является ресурсом, который может быть «перемотан», или поддерживает несколько входных указателей), вам, как правило, придется предоставить схему буферизации, котораяведет себя так, как будто он сохраняет каждый элемент данных, пока все потребители не прочитают его.
У вас есть несколько вариантов реализации.Самое простое - это то, что вы предлагаете, с накладными расходами, являющимися, главным образом, пространством для хранения нескольких копий данных в выходных буферах.Если проблема заключается в хранении, вы можете предоставить один буфер, который поддерживает отдельные указатели чтения, по одному для каждого потребителя, и сохраняет в памяти только данные между самым низким и самым высоким указателями чтения.Если потребители читают данные с очень разными скоростями, вы все равно можете получить большую часть или все входные данные в памяти, и в этот момент станет необходимым какое-то регулирование ввода или промежуточная схема буферизации диска.
Я предполагаю, что один входной поток не является постоянным (то есть файл на диске) ... в этом случае решение тривиально.