通过streamreader读取多个java属性

时间:2012-10-22 18:34:47

标签: 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(),底层读者在返回后保持打开状态,但我想我错过了解释“何时”实际返回的部分。如何使用一个流读取多个属性?

1 个答案:

答案 0 :(得分:0)

假设您有2个属性实例:

答:

a=b
c=d

B:

e=f
g=h

如果您发送这两个属性实例,将在线路上发送的内容将是:

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

并且接收者无法知道这构成两个不同的实例。它会在流结束之前读取所有属性,并将所有读取属性存储在单个对象中。

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