java - 通过 streamreader 读取多个 java 属性

标签 java sockets

我一直在尝试通过套接字连接发送多个 Properties 实例,使用 PrintWriter/BufferedWriter 发送和 InputStreamReader 读取,所有发送和接收都是循环进行的。

发件人:

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
for (int i = 0; i < vector.size(); i++) {
    Properties mail = (Properties) vec.get(i);
    mail.store(bw, line);
    bw.newLine();
    bw.flush();
}

接收者:

ireader = new InputStreamReader(socket.getInputStream());
Properties[] mails=new Properties[c];
for (int i = 0; i < c; i++) {
    Properties p;// = new Properties();
    mails[i] = new Properties();
    mails[i].load(ireader);
}

但我只在整个循环完成后才收到接收方发送的最后一个 Properties 对象。这意味着接收器一直在加载,直到套接字最终关闭。文档确实说对于 load(),底层读取器在返回后保持打开状态,但我想我错过了解释“何时”实际返回的部分。如何使用一个流读取多个属性?

最佳答案

假设您有 2 个 Properties 实例:

答:

a=b
c=d

乙:

e=f
g=h

如果您发送这两个属性实例,将通过网络发送的内容将是:

a=b
c=d
e=f
g=h

而且接收方没有任何办法知道这构成了两个不同的实例。它读取所有属性直到流结束,并将所有读取的属性存储在单个对象中。

您需要找到另一个协议(protocol)来发送这两个对象。

关于java - 通过 streamreader 读取多个 java 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13017559/

相关文章:

windows - Apache Tomcat 错误 : Socket bind failed

java - 如何删除 Eclipse 提供的默认命令行参数?

java - 无法以此格式构造 JSON 响应

java - 为什么我的代码只输出 "O"?

c++ - 如何找到计算机的 IP 地址?

C TCP 套接字 - 获取数据包目标名称

java - Commons CLI 中没有选项名称的必需参数

java - Android,通过我的应用程序打开 url

Linux - 关闭的连接太多

c - Unsigned int 用 UDP 发送后显示为随机负整数