我想通過網絡流發送Java bean實例。我想用JAXB
和普通的OutputStream
對java實例進行編組/解組,以通過網絡推送它。JAXB通過套接字和流 - 閱讀器塊
的服務器等待解組點,但客戶端已經進一步了很多東西。
服務器:
inputStream = new BufferedInputStream(this.socket.getInputStream());
outputStream = new BufferedOutputStream(this.socket.getOutputStream());
JAXBContext requestContext = JAXBContext.newInstance(this.requestClass);
Unmarshaller unmarshaller = requestContext.createUnmarshaller();
@SuppressWarnings("unchecked")
K request = (K) unmarshaller.unmarshal(inputStream); //blocks here
respond();
客戶:
JAXBContext messageContext = JAXBContext.newInstance(message.getClass());
Marshaller marshaller = messageContext.createMarshaller();
out = new BufferedOutputStream(socket.getOutputStream());
marshaller.marshal(message, out);
out.flush();
waitForResponse();// blocks here
編輯:我切換到正常輸出流,但它還是塊。我是否必須發送一些特殊信號來告訴JAXB停止解組?如果我關閉客戶端輸出流,則消息到達服務器端。
XML讀取器和寫入器是不必要的(您可以使用常規輸出流),但不應該導致任何阻塞問題。請張貼正在流式傳輸的課程。 – Perception 2012-03-06 19:01:08
謝謝,請參閱編輯。這是否可能是解組人員正在等待某種特殊信號來阻止解組? – 2012-03-06 19:27:52
您是否可以修復標題,以便其他人稍後可以找到它? – mindandmedia 2012-03-06 20:22:54