У вас должен быть какой-то способ определить, где заканчивается один файл и начинается следующий - большинство файлов резервируют первые несколько байтов в качестве тега «identity».Помните, что настойчивость Java в отношении наличия байтового класса SIGNED может помешать их идентификации во время выполнения.
Однако вы не можете по-настоящему разделить потоки.Таким образом, вам придется размещать данные через обычные байтовые [] массивы.Я читал из родительского потока порциями по 4 КБ (для файлов) или 64 КБ (для сети), поскольку базовые нативные вызовы обычно используют эти размеры, сохраняли фрагменты в списках, а затем создавали ByteArrayInputStream для каждого файла в конце..