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 に答える