簡體   English   中英

當 BufferedReader.read(char[]) 返回 -1 時?

[英]When BufferedReader.read(char[]) returns -1?

我正在使用 Evolis 卡片打印機 SDK,它通過 TCP 套接字使用 JsonRPC 與客戶端進行通信。

我有一個由制造商提供的 Java 示例,但是我在讀取套接字時遇到了一些問題:

package MinimalClient;
import java.io.*;
import java.net.*;

public class MinimalClient 
{   
    public static void main(String[] args) 
    {
        try {
                String ip = "11.1.24.210";
                int port = 18000;
                char[] data = new char[1024];
                String request = "{\"jsonrpc\":\"2.0\",\"id\":\"1\",\"method\":\"CMD.SendCommand\",\"params\":{\"command\":\"Rfv\", \"device\":\"Evolis Primacy\", \"timeout\":\"5000\"}}"; 
                String answer = "";

                Socket socket = new Socket(ip,port);

                BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));

                DataOutputStream out = new DataOutputStream(socket.getOutputStream());

                byte[] byteRequest = request.getBytes("UTF-8");

                out.write(byteRequest);

                out.flush();

                while( (br.read(data)) != -1 ) 
                {
                    answer = new String(data);
                    System.out.println(answer);
                }

                socket.close();
            } 
            catch (Exception e) 
            { 
                System.out.println("Communication failed :\n");
                System.out.println(" - check TCP communication is activated\n");
                System.out.println(" - check the service is activated\n");
                System.out.println(" - check your IP address and port\n");                          
            }
    }
}

我被困在while( (br.read(data)) != -1 )因為在第一個循環之后, BufferedReader.read 不返回 -1 並停留在那里直到超時!

第一次運行獲取回復內容的所有 JSON,然后第二次運行卡住了,因為沒有什么可讀取的。

當 BufferedReader.read(char[]) 返回 -1 時?

當緩沖區另一端的發送者完成發送數據流時,'read' 方法是否會返回 -1。 通常從像磁盤一樣的持久存儲讀取,當從磁盤的文件中讀取最后一個字符時,該方法返回 -1。

然而,這是一個“套接字”,而“發送者”在網絡的另一端。 我懷疑“發件人”應該刷新()和關閉()他們的“輸出流”一側,以便您的“讀取()”方法獲得-1。

你應該聯系你的供應商並檢查一下。 一切順利,希望這有幫助。

BufferedReader.read(char[]) 將為文件返回 -1 如果(a)您已到達文件的末尾並且(b)該文件已打開以在其他地方寫入。 否則,它將等待更多數據寫入流。

解決這個問題的方法是檢查整個 JsonRPC 消息是否已發送,並關閉您這邊的連接

            while( (br.read(data)) != -1 ) 
            {
                answer = new String(data);
                System.out.println(answer);
                if (testForCompleteness(answer)) socket.close();
            }

暫無
暫無

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

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