Java套接字:逐个以两种不同的方式读/写流

时间:2015-01-02 04:10:56

标签: java sockets stream

关于java.net.Socket和java.io. 服务器想要向客户端发送消息,首先使用ObjectOutputStream为对象写入(读取,为客户端),然后使用BufferedWriter进行写入(读取,用于客户端)。

如果我仅使用ObjectXXXStreamBufferedXXX,我可以制作,但不能在一个流上使用它们。我该怎么办?

服务器:

oos = new ObjectOutputStream(client.getOutputStream());
oos.writeObject(dc);
// oos.close();

bw = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));          

bw.write("hahaha");
bw.flush();

while(true){
    line=br.readLine();
    if(line != null){
        ExecuteInput(line);
    }
}   

在客户端:

ois = new ObjectInputStream(socket.getInputStream());
XXX dc = (XXX) ois.readObject();
// ois.close();

String line;
while(true){
    try {
        // System.out.println("000000");
        line=br.readLine();
        // System.out.println("111111");
        if(line != null)
            System.out.println("aaaa "+line);
    } catch (IOException e) {
        System.out.println("222222");
        e.printStackTrace();
    }
}

2 个答案:

答案 0 :(得分:0)

您将使用ObjectOutputStream进行两次写入操作。一个插槽不能有2种不同类型的流,因此您可以选择功能最强的。

虽然,我会质疑是否确实需要发送对象。您可以改为发送对象的状态和"操作码"指定该状态应该做什么。但我不知道dc的目的,所以我无法确认

答案 1 :(得分:0)

当一个或多个流被缓冲时,您不能在套接字上使用多个流/读取器/写入器,并且BufferedWriterObjectOutputStream都被缓冲。

只需使用ObjectOutputStream()并将所有内容作为对象发送,或者通过writeUTF()发送字符串,这意味着您必须使用readUTF().

读取字符串