0

我有一个小型 J2ME 应用程序,它应该向套接字发送一些字节并读取响应。但是,当我关闭 OutputStrean 时,套接字也会关闭,我无法读取响应。我想我可以试试 OutputStream.flush();,但它什么也没做。这是我的 readAll() 方法,它应该从 OutputStream 读取数据:

public final static String readAll(InputStream d) throws IOException {
        ByteArrayOutputStream res = new ByteArrayOutputStream();
        byte[] bytes = new byte[1024];
        int length;
        while ((length = d.read(bytes)) != -1){
            res.write(bytes, 0, length);
        }
        return new String(res.toByteArray(), "UTF-8");
    }
4

1 回答 1

0

您通常希望在后台运行一个线程来处理实际发送和接收数据。

接收到的数据应该提供某种方式来确定该特定数据块何时终止。例如,服务器可能会发回:
(long)length+(byte[])data
因此,从您将读取的流中获取 8 个字节 + 无论长度是多少,然后您将使用该数据构造一个表示该消息的对象,并且您的其他线程将读取该数据以决定它要发送什么数据。

为了发送数据,您可以有效地执行相反的操作,使用一个单独的线程消耗代表要发送的消息的对象。

这些被称为消息队列,您可以在此处阅读有关它们的更多信息:https ://en.wikipedia.org/wiki/Message_queue

于 2020-05-01T18:12:24.110 回答