Получить XML и закодированные данные в файл с шестнадцатеричными нулями, используя Java - PullRequest
2 голосов
/ 21 января 2012

Мне нужно прочитать файл (существующий формат, который не находится под моим контролем), который содержит документ XML и закодированные данные.К сожалению, этот файл включает в себя данные, связанные с MQ, включая шестнадцатеричные нули (конец файлов).

Итак, используя Java, как я могу прочитать этот файл, убрав или проигнорировав «мусор», который мне не нуженполучить в XML и закодированных данных.Я полагаю, что приемлемое решение состоит в том, чтобы просто пропустить шестнадцатеричные нули (есть ли другие значения, которые остановят мое чтение?), Так как в любом случае мне не нужна информация MQ (заголовок RFH), и для моих целей значения не имеют значения.*

Я много искал и только находил действительно отвратительные сложные "решения".Должен быть лучший способ ...

Ответы [ 2 ]

1 голос
/ 15 февраля 2012

То, что работало, было извлекать документы XML - Groovy-код:

    public static final String REQUEST_XML          = "<Request>";
    public static final String REQUEST_END_XML      = "</Request>";
    /**
 * @param xmlMessage
 * @return 1-N EncodedRequests for those I contain
 */
private void extractRequests( String xmlMessage ) {
    int start = xmlMessage.indexOf(REQUEST_XML);
    int end = xmlMessage.indexOf(REQUEST_END_XML);
    end += REQUEST_END_XML.length();
    while( start >= 0 ) {   //each <Request>
        requests.add(new EncodedRequest(xmlMessage.substring(start,end)));
        start = xmlMessage.indexOf(REQUEST_XML, end);
        end = xmlMessage.indexOf(REQUEST_END_XML, start);
        end += REQUEST_END_XML.length();
    }
}

и затем декодировать часть base64:

    public String getDecodedContents() {
    if( decodedContents == null ) {
        byte[] decoded = Base64.decodeBase64(getEncodedContents().getBytes());
        String newString = new String(decoded);
        decodedContents = newString;
        decodedContents = decodedContents.replace('\r','\t');
    }
    return decodedContents;
}
0 голосов
/ 21 января 2012

Я уже сталкивался с этой проблемой (ну ... что-то похожее). Посмотрите на мой FilterInputStream для фильтра файлов, который вы сможете изменить в соответствии со своими потребностями.

По сути, он реализует буфер возврата, который отбрасывает все, что вам не нужно.

...