我有一個fileInputStream對象可能包含或不包含xml聲明<?xml version='1.0'?>
。如果存在,我需要去掉xml聲明。我怎麼做,而無需將inputStream對象轉換爲字符串,剝離XML PI,然後將其轉換回輸入流?如何去除java中輸入流的前幾個字符?
InputStream inputStream = new FileInputStream(importFilePath);
我有一個fileInputStream對象可能包含或不包含xml聲明<?xml version='1.0'?>
。如果存在,我需要去掉xml聲明。我怎麼做,而無需將inputStream對象轉換爲字符串,剝離XML PI,然後將其轉換回輸入流?如何去除java中輸入流的前幾個字符?
InputStream inputStream = new FileInputStream(importFilePath);
裹在PushbackInputStream的FileInputStream
,並查看是否有PI開始。如果是這樣,那就讀出來。否則,請推回您閱讀的字符以測試它。
我能想到的兩個選項:
使用FileInputStream.getChannel()。從頻道讀取後,如果需要將position(0)
重置爲開頭,則可以調用position(0)
。
使用自定義FilteredInputStream來包裝InputStream。這可以用第一行預先緩衝的方式來寫,以確定它是否會被使用或丟棄。
正如@MattTimmermans所述,有一個可用的FilteredInputStream實現可用於#2(PushbackInputStream)中提到的此目的。但是它保持連續的緩衝區,而不僅僅是最初的行。 –
這不是xml處理指令,它被稱爲xml聲明......它可能包含關於xml的重要信息,比如編碼類型,沒有這些信息數據可能會變得無效......這是你真正想做什麼? –
你是對的。它不是一個PI。我把它稱爲PI,因爲在我的場景中,我不得不在輸入流的開頭附加,在蒸汽結束時附加 ,我需要將生成的流傳遞給org.w3c.dom.Document.parse( )。解析方法拋出一個異常,說「org.xml.sax.SAXParseException:處理指令不能以xml開頭」。這個異常指向XML聲明的開始,並且說PI不能以xml開頭。 –
arun8
是的。我的目標是從inputStream中去除xml聲明。 – arun8