Я не думаю, что ваш вариант использования покрыт BeanIO. Я бы попробовал сделать что-то вроде этого:
- Убедитесь, что вы используете реализацию Reader, которая поддерживает маркировку и сброс. Примером является стандарт
java.io.BufferedReader
- Сначала
mark()
ваша текущая позиция на входе BufferedReader
.
- Считайте столько данных, сколько вам нужно, чтобы вручную определить, какой из ваших 2 потоков BeanIO использовать для чтения данных и преобразования их для вас в ваши объекты.
- Теперь
reset()
BufferedReader
, это заставит его «вернуться» в ту же точку, где вы назвали mark()
.
- Теперь используйте BeanIO для чтения ваших данных.
Возможно, вам придется повторить описанный выше процесс или настроить его в зависимости от структуры ваших данных. Вы не показываете, является ли ваш «заголовок» отдельной записью или это может происходить несколько раз между записями «dec»
Если у вас есть только одна запись «header» и несколько записей «dec», вы можете упростить описанный выше процесс с помощью чего-то вроде:
Считайте первую строку ваших данных напрямую с помощью метода BufferedReader.readLine()
в String
. Передайте эту строку читателю BeanIO, чтобы проанализировать ее и вернуть объект «заголовок».
String firstLine = bufferedReader.readLine ();
BeanReader beanReader = null;
FileSegment fileSegment = null;
try (Reader in = new BufferedReader (new StringReader (firstLine)))) {
beanReader = factory.createReader ("ebcdicFile", в);
fileSegment = (FileSegment) beanReader.read ();
}
Теперь вы можете создать еще один BeanReader
для чтения оставшихся входных данных, используя поток "file".