Ответ 1
Вы хотите SequenceInputStream и пару ByteArrayInputStream. Вы можете использовать String.getBytes, чтобы сделать байты для последнего. SequenceInputStream является древним, поэтому он немного неуклюже в использовании:
InputStream middle ;
String beginning = "Once upon a time ...\n";
String end = "\n... and they lived happily ever after.";
List<InputStream> streams = Arrays.asList(
new ByteArrayInputStream(beginning.getBytes()),
middle,
new ByteArrayInputStream(end.getBytes()));
InputStream story = new SequenceInputStream(Collections.enumeration(streams));
Если у вас есть много символов для добавления, и вы не хотите конвертировать их в байты en masse, вы можете поместить их в StringReader, затем используйте ReaderInputStream из Commons IO, чтобы читать их как байты. Но для этого вам нужно будет добавить Commons IO в свой проект. Точный код для этого остается как упражнение для читателя.