2015-07-13 85 views
1

Erlang是不同類型文件處理的好選擇嗎?例如 - 閱讀pdf,Word文檔,Excel工作表並將其轉換?我知道我們可以使用基於Java的Apache POI/Tika,然後使用JErlang進行集成。 我對Erlang的位語法不是很熟悉,但是想要檢查Erlang是否適合這種應用而不使用Apache POI?Erlang中的文件處理

回答

2

Erlang有很棒的binary support,這使它成爲解析不同類型二進制文件的絕佳語言。

即到decode a tcp segment by using binary syntax in erlang你可以這樣做

decode(Segment) -> 
    case Segment of 
    << SourcePort:16, DestinationPort:16, 
     SequenceNumber:32, 
     AckNumber:32, 
     DataOffset:4, _Reserved:4, Flags:8, WindowSize:16, 
     Checksum:16, UrgentPointer:16, 
     Payload/binary>> when DataOffset>4 
    -> 
     OptSize = (DataOffset - 5)*32, 
     << Options:OptSize, Message/binary >> = Payload, 
     <> = <>, 
     %% Can now process the Message according to the 
     %% Options (if any) and the flags CWR, ..., FIN. 
     binary_to_list(Message) 
    end. 

這相對於其他語言的使用模式匹配和解碼/編碼的二進制文件二進制支持一個超級簡單的方法。不過,Erlang更多的是在這些進程之間的併發處理和消息傳遞,所以我不會使用它來轉換/解析二進制文件,而是使用Erlang來管理Web服務器/ api並處理所有併發連接,我將委託文件轉換爲原始c/C++性能的工作,再加上c/C++或java上你有更豐富的庫來處理pdf/excel/word文檔

+0

謝謝。 Erlang不會影響性能嗎?我們可能沒有毫秒SLA,所以我想我們是否可以在Erlang中完成整個事情? – Chirota

+0

在這一點上,你應該真的做基準來決定是否去C/C++或Erlang,根據我的經驗,當用c/C++處理二進制文檔比用erlang/beam處理時有更好的性能,你可以建立端口來使用c/C++ erlang:http://www.erlang.org/doc/tutorial/c_port.html,你也可以實現unix套接字來從erlang調用c/C++,這也是相當快的,真正的問題不在於從Erlang到c/C++,但erlang需要解析數百萬個二進制文檔所需的時間/ CPU。 – rorra