Я не могу понять, неправильно ли я использую конвейерные потоки или моя проблема связана с проблемой, описанной ниже.
У меня есть объект (называемый adi), который я маршалирую в файл, как показано ниже:
final PipedInputStream pipedInputStream = new PipedInputStream();
OutputStream pipedOutputStream = null;
pipedOutputStream = new PipedOutputStream(pipedInputStream);
log.info("marshalling away");
final OutputStream outputStream = new FileOutputStream(new File(
"target/test.xml"));
m.marshal(adi, outputStream);
outputStream.flush();
outputStream.close();
pipedOutputStream.write("test".getBytes());
// m.marshal(adi, pipedOutputStream);
pipedOutputStream.flush();
pipedOutputStream.close();
log.info("marshalling done");
return pipedInputStream;
- Этот код создает файл target/test.xml с ожидаемым содержимым (упорядоченный объект), проверяя, правильно ли работает упорядочивание в outputStream.
- Код также генерирует pipedInputStream. Если я перебираю байты, извлеченные из этого потока, и печатаю их, он отображает «тест», подтверждая тот факт, что мой поток ввода/вывода правильно настроен и работает.
Тем не менее, когда я раскомментирую
//m.marshal(adi, pipedOutputStream);
код зависает навсегда (никогда не отображает «сортировка завершена»), в то время как я ожидаю, что код вернет входной поток, содержащий «тест», за которым следует мой упорядоченный объект.
Что мне не хватает?
Спасибо