簡體   English   中英

Java套接字:以兩種不同方式逐一讀取/寫入流

[英]Java Sockets: read/write stream in two different ways one by one

關於java.net.Socket和java.io。 服務器要向客戶端發送消息,首先使用ObjectOutputStream寫入(為客戶端讀取)一個對象,然后使用BufferedWriter寫入(為客戶端讀取)。

如果僅使用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器。

只需使用ObjectOutputStream()並將所有內容作為對象發送,或者通過writeUTF()發送字符串,這意味着您必須使用readUTF().讀取字符串readUTF().

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM