Редактировать: теперь я вижу. Вы получаете XML в виде кусков и хотите передать его в правильный анализатор XML. Итак, вам нужен объект, который является очередью на одном конце и InputStream на другом конце?
Можно объединить полученные байтовые массивы в ByteArrayOutputStream, преобразовать его в ByteArrayInputStream и передать его в SAXParser.
Или вы можете проверить пару PipedInputStream / PipedOutputStream. В этом случае вам нужно будет выполнить синтаксический анализ в другом потоке, так как анализатор SAX использует текущий поток для отправки событий, блокируя вашу receive ().
Редактировать : На основании комментариев я предлагаю выбрать маршрут агрегации. Вы собираете куски в ByteArrayOutputStream. Чтобы узнать, получили ли вы все фрагменты для вашего XML, проверьте, содержит ли текущий фрагмент или содержимое ByteArrayOutputStream ваш конечный тег корневого узла XML. Затем вы можете просто передать данные в SAXParser, который теперь может без проблем работать в текущем потоке. Чтобы избежать ненужного пересоздания массива, вы можете реализовать свою собственную несинхронизированную оболочку простого байтового массива или искать такую реализацию.