我有一个小型 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/