Datainputstream和readUTF丢失了数据

问题描述 投票:0回答:1

我正在使用Java,并从服务器接收到一些json字符串。我收到了带有readUTF的json字符串,但是丢失了一些数据。我没有收到每个json数据包的前两个字符。另一个问题是接收到的json字符串存在延迟。例如,服务器发送了一个json字符串,而客户端无法接收它,直到服务器和客户端发送的大约50个json字符串突然显示了所有json字符串。主要问题是什么?

public void run() {
    System.out.println("hi from thread" + id);
    try {
        clientSocket = new Socket("192.168.1.22", id);
        output = new PrintStream(clientSocket.getOutputStream());
        input = new DataInputStream(clientSocket.getInputStream());
        inputLine = new DataInputStream(new BufferedInputStream(System.in));
    } 
    catch( IOException e){
        System.out.println(e);
    }
    String responseLine;
    try{      
        while(true){
            output.println( id + " ");
            System.out.println("sent:" + id + " ");
            responseLine = input.readUTF();
            System.out.println("received: " + responseLine);
        }
    }
    catch (IOException e) {
        System.out.println(e);
    }
}

由于服务器以UTF格式发送数据,所以我无法通过Bufferedreader接收它们

java json datainputstream
1个回答
1
投票

我在使用这样的应用程序之前就遇到了这个问题,主要原因是DataInputStream,它期望输入采用某种特定格式,我认为服务器不遵循该格式,因此请尝试使用BufferedReader:

BufferedReader input = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

然后只要您想读取数据就使用

some_string_here = input.readLine();

注意,这要求发送的每个数据值都以结尾行字符“ \ n”或“ \ r”结尾。

© www.soinside.com 2019 - 2024. All rights reserved.