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



关于java.net.Socket and java.io.服务器想要向客户端发送消息,首先使用 ObjectOutputStream 写入(读取,对于客户端)一个对象,然后使用 BufferedWriter 写入(read,for client)。

如果我只使用ObjectXXXStream或只使用BufferedXXX,我可以做到,但不能在一个流上一起使用它们。我该怎么办?

服务器:

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();
    }
}

您将对这两个写入操作使用ObjectOutputStream。一个套接字不能有 2 种不同类型的流,因此您可以选择功能最强大的流。

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

缓冲一个或多个

流/读取器/写入器时,不能在套接字上使用多个流/读取器/写入器,并且缓冲BufferedWriterObjectOutputStream

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

相关内容

  • 没有找到相关文章

最新更新