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

标签 java server client-server java-me cldc

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

最佳答案

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

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

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

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

关于java - 将数据写入 OutputStream 而不使用 CLDC 关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58174132/

相关文章:

java - Android编程,后台任务(Context)中的后台任务不能应用到()

用于服务器的 Java 应用程序

javascript - 将文件转换为 url 中的可下载文件 - javascript

java - Java 系统属性的范围

java - b0rked eclipse/IBM RAD

java - 将 GDCM 图像转换为 Java BufferedImage

c - C中客户端和服务器程序之间的时钟同步

c# - 无法从应用程序配置读取连接字符串

c++ - 错误 C4996 : 'gethostbyaddr' : Use getnameinfo() or GetNameInfoW() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings

Java客户端服务器安全通信