簡體   English   中英

如何檢查 Java 中的 ObjectInputStream 是否為空?

[英]How to check ObjectInputStream is empty in Java?

我試圖通過 sockets 實現一個基本的聊天應用程序,但我對 ObjectInputStream 有問題。 我在 while(true) 循環中使用了兩種寫讀方法,當沒有任何東西可以讀取並無限等待它時,編譯過程卡住了。 因此,我需要在閱讀之前檢查它是否為空。

這是我的代碼。

服務器:

Socket socket = server.accept();
        
        ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
        ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
        
        oos.writeObject("Server connected!");
        oos.flush();
        
        String message = (String) ois.readObject();
        System.out.println(ois.available());
        txtChat.setText(message);
        
        while(true) {
            
            if(sendMessage) {
                
                oos.writeObject(txtMessage.getText());
                oos.flush();

                sendMessage = false;
            }
            
            while(!sendMessage) {
                message = (String) ois.readObject();
                txtChat.setText(txtChat.getText()+"\n"+"Client: "+message);
            }

            Thread.sleep(100);
        }

客戶:

socket = new Socket(host.getHostName(), 9876);
        oos = new ObjectOutputStream(socket.getOutputStream());
        ois = new ObjectInputStream(socket.getInputStream());
        
        oos.flush();
    
        String message = (String) ois.readObject();
        txtChat.setText(message);
        
        while(true) {
            message = (String) ois.readObject();
            txtChat.setText(txtChat.getText()+"\n"+"Server: "+message);
            
            if(sendMessage) {
                oos.writeObject(txtMessage.getText());
                oos.flush();
                
                sendMessage = false;
            }
            
            
            Thread.sleep(100);
        }
    

stream 關閉或打開。

輸入 stream 不知道它已關閉,直到您從中讀取內容。 這正是 stream 上不存在這種isClosed()方法的原因。

您可以將 stream 中的字節讀取到 object 中。 充其量您將能夠構建 object。 否則,您應該處理 IO 異常並做出相應決定。

或者,您可以檢查在不阻塞的情況下可以讀取多少字節。 如果為 0,則您正在查看等待輸入的空 stream。

inputStream.available() != 0 //handle exception

暫無
暫無

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

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