当前位置: 首页 > 知识库问答 >
问题:

Datainputstream和readUTF数据丢失

司徒鸿文
2023-03-14

我正在使用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接收它们

共有1个答案

翁建弼
2023-03-14

我以前遇到过这样的应用程序问题,主要原因是DataInputStream,它希望输入采用某种格式,我认为服务器不符合这种格式,请尝试使用BufferedReader,如下所示:

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

然后每当你想读取数据时,只需使用

some_string_here = input.readLine();

注意:这要求每个数据值都以一个结束行字符“\n”或“\r”结尾。

 类似资料:
  • 我编写了一个监听客户机的简单服务器,当客户机连接时,它打开一个Datainputstream,读取从客户机发送的所有数据(我的客户机wirte UTF数据)。

  • 我一直在写一个程序,它使用UDP上的停止和等待协议通过局域网和广域网发送数据包。我最近一直在测试我的程序,并注意到较大的数据包(接近64k字节)的丢包率更高。直觉上这是有道理的,但实际原因是什么?

  • 我对使用PrimeFaces 3.4.1和JSF 2.1.6的dataTable有以下问题。第一次加载页面时,数据表中充满了数据库中的数据,但每当在页面上执行操作(编辑链接、数据表排序或过滤)时,数据表就会丢失其数据。DataTable包含来自此类的元素: 在dataTable上执行操作后进行调试时,我们只在envioDatasujeto字段上保留数据,元素上的其他所有数据都会丢失。 这是xhtm

  • DataInputStream用于DataOutputStream的上下文中,可用于读取基元。 以下是创建InputStream的构造函数 - InputStream in = new DataInputStream(InputStream in); 一旦掌握了DataInputStream对象,就会有一个辅助方法列表,可用于读取流或对流进行其他操作。 Sr.No. 方法和描述 1 public

  • 问题内容: 有什么方法可以强制DataInputStream读取小端数据?谢谢 PS。进行字节缓冲区转换不是很方便,因为我要处理的C型结构具有很多32位和16位成员。 问题答案: 不。您需要包装流以从大字节序转换为小字节序。您可以在google上找到小端流的几种实现。

  • 问题内容: 如PHP文档中所述,当使用包含长整数的数据结构时,它们将被转换为浮点数。解决方法是使用,而是将其保留为字符串。当荷兰国际集团这样的值,将编码这些数字背到大的整数: 使用此方法进行正确的数据往返很容易出错。如果属性包含,则数字字符串应保留为字符串,它将被编码为整数。 我想从服务器获取一个对象,修改一个属性,然后将整个数据结构放回去。我需要保留原始类型。除了要处理的属性外,我不想保留其他属