我使用的是sun提供的javax.comm包,不確定其他的comm支持包(比如:rxtx)行為與之相同
1、事件驅(qū)動的數(shù)據(jù)讀取
需要注意的是:一個SerialPort只能注冊一個事件監(jiān)聽程序,因此,有時候有會發(fā)現(xiàn),你的事件監(jiān)聽處理程序會變得非常龐大
另外,要注意的就是事件處理如果比較耗時的話,最好是在單獨的線程中運行,否則會阻塞數(shù)據(jù)的接收。
串口接收到數(shù)據(jù)后,默認在線程: Win32SerialPort Notification thread中運行。如果不及時釋放的話,會造成數(shù)據(jù)無法讀取。
我的做法是,接收到數(shù)據(jù)后,先判斷數(shù)據(jù)的合法和完整性,如果沒有接收到完整的數(shù)據(jù),則在緩存數(shù)據(jù)后,馬上返回
如果數(shù)據(jù)完整而且合法,則另開一個線程,進行數(shù)據(jù)處理
2、數(shù)據(jù)的發(fā)送
建議單獨使用一個線程來發(fā)送數(shù)據(jù),目的還是為了防止阻塞,有一個技巧就是使用OUTPUT_BUFFER_EMPTY事件來發(fā)送。