2012-01-20 7 views
2

XML文書とエンコードされたデータを含むファイル(自分の管理していない既存の形式)を読む必要があります。このファイルに残念なことに、16進ゼロ(ファイルの終わり)を含むMQ関連のデータが含まれています。Javaを使用して16進数の0のファイルでXMLとエンコードデータを取得

Javaを使用すると、XMLとエンコードされたデータを取得する必要はありません。とにかくMQ情報(RFHヘッダー)は必要ないし、カウントが無意味なので、受け入れ可能な解決策は、16進数ゼロを除外することです(私の読書を止める他の値はありますか?)。

私は多くを検索し、本当に厄介な複雑な "解決策"しか見つけませんでした。より良い方法が必要です...

+0

は、既知の長さのプリ/ポストゴミですか? – cdeszaq

+0

私はそれに関する文書を持っていないので、私は "いいえ" – Mark

答えて

1

- 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

私はこの問題にぶつかっています。あなたのニーズに合わせて修正できるファイルフィルターを私のFilterInputStreamに見せてください。

本質的に、それは、あなたが望まないものを取り除くプッシュバックバッファを実装しています。どのような仕事をすると、XML文書を引き出すことでした

関連する問題