将数据写入OutputStream而不用CLDC关闭

问题描述 投票:0回答:1

我有一个小型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");
    }
java server client-server java-me cldc
1个回答
0
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.