java - 当 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?
解决方案
当缓冲区另一端的发送方完成发送数据流时,“读取”方法是否会返回 -1。通常从磁盘等持久存储中读取,当从磁盘中的文件中读取最后一个字符时,该方法返回-1。
但是,这是一个“套接字”,而“发送者”位于网络的另一端。我怀疑“发送者”应该刷新()和关闭()他们的“输出流”一侧,以便您的“读取()”方法获得-1。
您应该与您的供应商联系并检查一下。一切顺利,希望这会有所帮助。
推荐阅读
- function - Lua - 连接传递给函数的几个参数,直到满足条件,然后将字符串传递给下一个函数
- css - 如何在 Angular 8 中覆盖自定义组件 css
- vue.js - Vue.js:全局事件总线未能捕获事件
- sql-server - 在 select 的 SQL UNION 之后替换 NULL 列
- javascript - 使用 WebRTC 将从网络摄像头捕获的图像上传到服务器
- python - 从 csv file_Python 获取非零数据位置
- javascript - Redux - 如何从存储中获取数据并发布
- unicode - 哪个 Unicode 字符用于下载标志?
- stata - 折叠一个变量的总和,但另一个变量的平均值
- random-walk - 如何在 TensorFlow Probability 中实现集成随机游走趋势组件