Rome使用簡單說明二 部分關鍵原始碼分析

2021-08-29 06:14:10 字數 3667 閱讀 2829

parser部分(解析)

com.sun.syndication.io.syndfeedinput input = new com.sun.syndication.io.syndfeedinput();

呼叫public syndfeedinput()

public syndfeedinput(boolean validate)

直接就構造了物件wirefeedinput _feedinput.

com.sun.syndication.feed.synd.syndfeed feed = input.build(new

com.sun.syndication.io.xmlreader(feedurl));

實際上呼叫的是wirefeedinput物件的build方法

wirefeedinput裡有個物件feedparsers,構造wirefeedinput時,也會例項化feedparsers,例項化

feedparsers時,由於feedparsers extends pluginmanager,所以會通過pluginmanager去載入

rome.properties檔案,(因為feedparsers 裡feed_parsers_key = "wirefeedparser.classes"所以會去

rome.properties裡載入key為wirefeedparser.classes的值)。並例項化所有的parser物件。

所以當在wirefeedinput裡呼叫feedparsers的getparserfor(document)方法時,會自動匹配該document需

要用哪個解析器來進行解析

feedparsers.getparserfor(document)方法返回的是個inte***ce wirefeedparser.

在wirefeedinput裡呼叫

public wirefeed build(document document) throws illegalargumentexception,feedexception

return parser.parse(document, _validate);//最終呼叫的parser方法,返回的是乙個

wirefeed物件。

syndfeedimpl建構函式接受到wirefeed引數以後,直接通過feedtype獲取需要哪種轉換器(converter)

因為converters是converters物件,converters是extends pluginmanager的。所以可以通過converters

來載入rome.properties,並讀取key為converter.classes的value;

public syndfeedimpl(wirefeed feed)

converter.copyinto(feed,this);//將wirefeed物件裡的各個屬性值,轉換為syndfeed對應的值}

}//將wirefeed物件裡的各個屬性值,轉換為syndfeed對應的值

public void copyinto(wirefeed feed,syndfeed syndfeed)

syndfeed.setencoding(feed.getencoding());

channel channel = (channel) feed;

syndfeed.settitle(channel.gettitle());

syndfeed.setlink(channel.getlink());

syndfeed.setdescription(channel.getdescription());

image image = channel.getimage();

if (image!=null)

list items = channel.getitems();

if (items!=null)

}channel extends wirefeed(是個abstaract)

輸出部分:

//寫入到另乙個檔案裡

syndfeedoutput output = new syndfeedoutput();

feed.setfeedtype(feedtype);//以哪種格式輸出feed,如果這裡不設定以哪種格式輸出,會以它原來的格

式輸出output.output(feed, new file("c:/pic/2.xml"));

直接呼叫的是syndfeedoutput物件裡的方法:

public void output(syndfeed feed,file file) throws ioexception, feedexception

wirefeedoutput物件裡的output方法:

public void output(wirefeed feed,file file) throws

illegalargumentexception,ioexception,feedexception

convert裡:又把syndfeed的entries格式轉換為wirefeed的item形式

可以把wirefeed看成是一種中間格式,是document和syndfeed之間的一種中間格式(只是可以這樣看作)

public wirefeed createrealfeed(syndfeed syndfeed)

protected wirefeed createrealfeed(string type,syndfeed syndfeed)

list sentries = syndfeed.getentries();

if (sentries!=null)

return channel;

}總結:

1。wirefeedoutput和wirefeedinput只是對wirefeed的一種操作(也就是需要syndoutput傳遞給它的引數

是個wirefeed物件,wirefeedinput返回的也是個wirefeed物件)。(document<==>wirefeed之間轉換)

例如:wirefeedinput是接收到乙個document物件,然後將其轉換為wirefeed物件,同理 wirefeedoutput

也是接收到wirefeed物件後,將其轉換為document物件。

2。syndfeedoutput和syndfeedinput是操縱syndfeedimpl物件的。例如:

syndfeedinput build方法,建立syndfeed物件

public syndfeed build(document document) throws illegalargumentexception,feedexception

syndfeedout output方法 

public void output(syndfeed feed,file file) throws ioexception, feedexception

3。syndfeedimpl物件:(syndfeed<==>wirefeed):

a.public syndfeedimpl(wirefeed feed)建構函式中**converter.copyinto(feed,this);,將wirefeed

轉換為syndfeed格式

b.public wirefeed createwirefeed(string feedtype),將syndfeed格式轉換為wirefeed

4.convert 體現的是wirefeed和syndfeed之間的轉換

Web API 第二部分

web api 第二部分 元素偏移量 offset element.offsettop element.offsetleft element.offsetwidth 可以得到元素的大小 寬度和高度 是包含padding border width element.offsetheight elemen...

redux 第二部分

redux 的使用方法,為什麼使用 action.js 檔案,進行優化 將其分開,然後我們通過工廠函式的每次返回不同的物件,由於引數是固定的,每次返回的都是事件型別和事件資料,所以我們可以使用乙個函式,通過其返回值來返回乙個物件,讓後傳遞給 action 我們的 reducer 函式有兩個引數,引數...

實驗二 第二部分

第二部分 ftp協議分析 1.兩個同學一組,a和b。2.在a主機上架設ftp伺服器 3.在b主機上執行wireshark,並登陸a主機的ftp伺服器,上傳一張,得到抓取的資料報,4.進行追蹤tcp流,顯示為原始資料,分析得到a主機登陸ftp的過程及使用者名稱密碼,還原上傳的,第二部分 ftp協議分析...