首页 > 解决方案 > 当 BufferedReader.read(char[]) 返回-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?

标签: javasocketstcpsdkbufferedreader

解决方案


当缓冲区另一端的发送方完成发送数据流时,“读取”方法是否会返回 -1。通常从磁盘等持久存储中读取,当从磁盘中的文件中读取最后一个字符时,该方法返回-1。

但是,这是一个“套接字”,而“发送者”位于网络的另一端。我怀疑“发送者”应该刷新()和关闭()他们的“输出流”一侧,以便您的“读取()”方法获得-1。

您应该与您的供应商联系并检查一下。一切顺利,希望这会有所帮助。


推荐阅读