У меня есть сокет подачи в синтаксический анализатор, отформатированный как поток ISO 8859/1.Время от времени встречается недопустимый символ, и я получаю исключение SAXParseException со строкой и столбцом, где это произошло, поэтому мне нужно посмотреть, какие данные находятся в этой точке (или, что более важно, зарегистрировать их).
Первоначальностроки, которые обрабатывали данные, были:
InputSource is = new InputSource(new InputStreamReader(socket.getInputStream(), "ISO8859_1"));
XMLReader reader = XMLReaderFactory.createXMLReader();
reader.setContentHandler(new ResponseParseHandler(etc, id));
reader.parse(is);
Проблема в том, что я не могу получить данные после того, как это произошло, поэтому я изменил их на чтение в большой байтовый буфер, преобразовав его встроку и проанализировать эти данные с StringReader.К сожалению, данные, поступающие из сокета, в течение длительного времени распределяются небольшими порциями, поэтому они будут начинаться с корневого тега при первом подключении, но затем будут тысячи отдельных сообщений без закрывающего тега.
Поскольку я анализирую эти строки по отдельности, когда они входят в первую, возникает ошибка, что у нее нет закрывающего тега, и следующие ошибки, поскольку у них нет базового тега.Этого не происходит с сокетом, так как я предполагаю, что поток все еще открыт
Предположительно, я могу передать эти строки другому читателю / устройству записи, но, кажется, становится действительно сложно просто выяснить, что такое блок данныхбыло во время ошибки.
Есть ли что-то действительно простое, что я здесь упускаю?