很抱歉,我重复一个topik。但我不明白这里的答案
https://stackoverflow.com/a/9598909/1404852 “Kafka”说他通过使用XMLEventWriter修复了解组块。导致建议在Stream Strings中写入然后将它们连接到unmarshal不适合我。
我有这样的代码。
public class InputThread implements Runnable {
private BufferedReader in;
private String fserver; // = CharBuffer.allocate(0);
private static final Logger LOG = Logger.getLogger(InputThread.class);
private JAXBContext jaxbContext;
private Unmarshaller jaxbUnmarshaller;
private XMLProtocol protocol;
public InputThread(Socket fromserver, BufferedReader in) throws IOException, JAXBException {
jaxbContext = JAXBContext.newInstance(XMLProtocol.class);
jaxbUnmarshaller = jaxbContext.createUnmarshaller();
this.in = in;
new Thread(this);
}
public void run() {
while (true) {
try {
if (in.ready())
protocol = (XMLProtocol) jaxbUnmarshaller.unmarshal(in);
}
}
}
}
或者在服务器端我应该插入流的结尾?但我认为JAXB可以做任何事情......
答案 0 :(得分:0)
流可以编码前面的长度,它可以用EOF这样的特殊字符结束,或者服务器可以关闭连接。如果您预先对长度进行编码,则可能需要构造某种特殊的输入流,这些输入流在许多字符之后自行关闭。这就像带有Content-Length标头和流水线的HTTP。如果您以EOF之类的特殊字符结尾,则必须将该字符视为保留字符。此外,如上所述,您需要一个特殊的输入流。这次它在读取特殊字符时很接近。它不会出现在您的数据中,因为它现在是一个元字符。关闭连接就像没有流水线的HTTP。