1

对不起,我重复一个话题。但我不明白这里的答案

https://stackoverflow.com/a/9598909/1404852 “Kafka”说他使用 XMLEventWriter 修复了解组块。导致建议写入流字符串,然后将它们连接到不适合我的解组。

我有这样的代码。

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 可以做任何事情......

4

1 回答 1

0

流可以预先对长度进行编码,它可以以 EOF 之类的特殊字符结尾,或者服务器可以关闭连接。如果您预先对长度进行编码,您可能需要构建某种特殊的输入流,在那么多字符之后自行关闭。这就像带有 Content-Length 标头和流水线的 HTTP。如果以 EOF 之类的特殊字符结尾,则必须将该字符视为保留字符。此外,如上所述,您将需要一个特殊的输入流。这次它在读取特殊字符时很接近。它不能出现在您的数据中,因为它现在是一个元字符。关闭连接就像没有流水线的 HTTP。

于 2012-06-13T00:52:38.633 回答