![](/img/trans.png)
[英]Why does BufferedReader.read(char[]) appear to skip chars when read() does not?
[英]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.