![](/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.