首页 > 解决方案 > 如何在 Java Android 中查找对象的大小

问题描述

我是 android 和 python 的新手,我正在尝试在我的 android 客户端和 python 服务器之间建立 TCP 套接字连接。每次我在我的应用程序中滑动时,我都会将滑动运动的方向发送到服务器。

//java client
            OutputStream output = client.getOutputStream();
            DataOutputStream out = new DataOutputStream(new BufferedOutputStream(output));

            byte[] msg;
            if(strings[1].equals("swipe"))
            {
                out.write(strings[1].getBytes());
                out.flush();
                //strings[0] contains the movement information in format of:
                //xmovement_ymovement
                //for example: 2.5365_8.5478
                msg = strings[0].getBytes();
                out.write(msg);
                out.flush();
            }



#python server
    #the 1024 is a temporary number I just put in there 
    #because I don't know how to find the size of the data in the java client side
    request_byte = client_socket.recv(1024)
    print("reqeust_byte size: " + str(sys.getsizeof(request_byte)))
    request = request_byte.decode()
    print("Received " + request)

    if request == "swipe":
        movement_byte = client_socket.recv(1024)
        print("movement_byte size: " + str(sys.getsizeof(movement_byte)))
        movement_str = movement_byte.decode()
        x_movement, y_movement = movement_str.split("_")
        print("x: " + x_movement)
        print("y: " + y_movement)
        swipe(float(x_movement), float(y_movement))

当完成一个简单的按钮按下并发送单个数据时,代码工作正常,但是当我轻扫并且在短时间内将大量数据发送到服务器时,数据会混淆并且变得不可预测。

现在,正如这篇文章Receiving end of socket splits data when printing说的那样,我知道我需要构建一个描述消息的协议,但是在 Java 客户端,我无法获得我想要的数据大小发送,所以我被困在这里。

这篇文章在 Java 中,确定对象大小的最佳方法是什么?说我可以通过使用 java.lang.instrument 包找到对象的大小,但我无法在 android studio 中导入 java.lang.instrument.Instrumentation。有没有另一种方法可以在 android studio 中找到对象的大小?

标签: javaandroidsocketstcp

解决方案


推荐阅读