寫程序中遇到一個問題?如下:
mySoc?=?new?Socket(svrAddress,5555);
myInput?=?new?ObjectInputStream(mySoc.getInputStream());//有問題
myOutput?=?new?ObjectOutputStream(mySoc.getOutputStream());//有問題
//myInput?=?new?DataInputStream(mySoc.getInputStream());
//myOutput?=?new?DataOutputStream(mySoc.getOutputStream());?
注銷的語句運(yùn)行可以成功
但是未注銷的那部分?運(yùn)行時就卡在那里了
但是卻沒有拋出異常
請教原因是什么?有什么問題
該怎么解決呢?
找了好久終于再網(wǎng)上找到關(guān)于這個問題的說明了?因?yàn)閱栴}比較特殊?所以貼出來希望對大家
有幫助
主機(jī)端先建立ObjectInputStream后建立ObjectOutputStream,則對應(yīng)地客戶端要先建立
ObjectOutputStream后建立ObjectInputStream,否則會造成兩方互相等待數(shù)據(jù)而導(dǎo)致死
鎖。
原因是建立ObjectInputStream對象是需要先接收一定的header數(shù)據(jù),接收到這些數(shù)據(jù)之前
會處于阻塞狀態(tài)。故而為了防止這種死鎖狀態(tài),通訊兩方的
ObjectInputStraem,ObjectOutputStream必須注意順序?qū)?yīng)使用。
目前相應(yīng)的解決辦法還沒有找到?如果要解決?可以嘗試重載對象輸入輸出流