1
我寫了一個runnable網絡類,它在套接字上偵聽並取消編組輸入。它也可以使用編組對象寫入套接字。出現問題是因爲套接字保持打開狀態(以便稍後允許客戶端和主機之間的通信) - 這會導致輸入流的解組停止。我已經嘗試從發件人一方編寫XMLStreamConstants.END_DOCUMENT,但這會導致錯誤解組而不是掛起。下面是一些對網絡類代碼:Unmarshalling掛在打開套接字上
@Override
public void update(Observable o, Object arg) {
try {
if(!this.updatedByNetwork){
OutputStream os = socket.getOutputStream();
mh.marshal(this.gm.getBoard(), os);
os.flush();
}
}catch (IOException e) {
e.printStackTrace();
} catch (JAXBException e) {
e.printStackTrace();
}
}
@Override
public void run() {
try {
if (this.ss != null){
this.socket = this.ss.accept();
this.update(this.gm, null);
}
while (true){
try {
InputStream is = socket.getInputStream();
Board b = mh.unmarshal(is);
this.updatedByNetwork = true;
this.gm.updateBoard(b);
} catch (SocketTimeoutException e){
e.printStackTrace();
} catch (JAXBException e) {
e.printStackTrace();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
下面的代碼爲我的馬歇爾處理程序:
public Board unmarshal(InputStream in) throws JAXBException{
Unmarshaller um = this.jc.createUnmarshaller();
Board b = (Board) um.unmarshal(in);
return b;
}
public void marshal(Board b, OutputStream os) throws JAXBException {
Marshaller m = this.jc.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
m.marshal(b, os);
}
那麼,有沒有一種方法來表示文件的解組結束了嗎?或者,有沒有更好的方法來做到這一點?