Java 在不使用CLDC关闭的情况下将数据写入OutputStream

Java 在不使用CLDC关闭的情况下将数据写入OutputStream,java,server,client-server,java-me,cldc,Java,Server,Client Server,Java Me,Cldc,我有一个小的J2ME应用程序,它应该向套接字发送一些字节并读取响应。然而,当我关闭OutputStrean时,套接字也会关闭,我无法读取响应。我想我可以试试OutputStream.flush();,但它什么也没做。 下面是我的readAll()方法,它应该从OutputStream读取数据: public final static String readAll(InputStream d) throws IOException { ByteArrayOutputStream r

我有一个小的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");
    }

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

接收到的数据应该提供某种方法来确定特定数据块何时终止。例如,服务器可能会发回:
(长)长度+(字节[])数据

因此,从流中读入8个字节+不管长度是多少,然后使用该数据构造一个表示该消息的对象,而另一个线程将读入该数据以决定它想要发送什么数据

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


这些被称为消息队列,您可以在此处阅读有关它们的更多信息:

在读取响应之前不要关闭OutputStrean;但若不关闭,OutputStream数据将不会被发送,所以服务器将无法发送响应。如果我关闭OutputStream,服务器会很好地处理输入,但由于客户端SocketConnection已关闭,它无法将数据写入其InputStream。