【问题标题】:Datainputstream and readUTF have data lostDatainputstream 和 readUTF 有数据丢失
【发布时间】:2020-05-20 22:22:21
【问题描述】:

我正在使用 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收不到数据

【问题讨论】:

  • 您应该向我们展示代码。但我可以说,你的问题很可能是 DataInputStream 和 readUTF() 的使用。仔细阅读DataInput.readUTF 文档。前两个字节被解释为要读取的字节数。这真的是你想要的吗?发件人真的以这种方式创建字节吗?

标签: java json datainputstream


【解决方案1】:

我以前在使用这样的应用程序时遇到过这个问题,主要原因是 DataInputStream 期望输入采用某种我认为服务器不符合的格式,请尝试使用 BufferedReader 代替:

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

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

some_string_here = input.readLine();

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

【讨论】:

  • 或者\r或者\r\n,不是转义符,是行终止符。
  • 您不应依赖 InputStreamReader 构造函数中的默认字符集。默认字符集是特定于平台的(例如 Windows 的 ANSI 和 Linux 的 UTF-8)。最好使用带有显式字符集的构造函数。
  • 不幸的是,使用 readline,我无法收到任何数据,但使用 readutf 我可以。
  • 但是 readUTF() 需要特定格式的数据。这没有帮助。如果你有纯 UTF-8,那么你应该用一个 InputStreamReader 和一个 BufferedReader 来包装 InputStream。这是要走的路。这行得通,我做了好几次。如果这对您不起作用,您应该向我们展示您调整后的代码,以便我们查找错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-09
  • 1970-01-01
  • 1970-01-01
  • 2020-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多