繁体   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