java中DataInputOutStream的readInt()和available()函数有什么区别



我需要知道如何表现 readInt() 和 available() 函数来读取数据流

例如:-[{"frame_id":"48","get_person":true,"type":"get_person","sensor_type":"mjpeg","data_size":41,"engine_id":"RTFACE"}{"type": "GET_PEOPLE_RESP", "people": []}]

问候 贾纳卡

如果你喜欢使用JSON,这将起作用。

JsonElement e = new JsonParser().parse(new InputStreamReader(inputStream));
JSONObject obj = new JSONObject(e.getAsJsonObject().toString());
int dataSize = obj.getInt("data_size");
boolean getPerson = obj.getBoolean("get_person");
String sensorType = obj.getString("sensor_type");

为了读取数据,我使用了readInt()函数,但它返回了部分传入流。

不,它没有。它返回一个整数。

为了完成其余部分,我使用了available().

为什么?它不会"拿走其余的"任何东西,更不用说"部分"了。它"返回可以在不阻塞的情况下读取的字节数的估计值"。参见Javadoc。

它返回零件的其余部分

不,它没有。

并停止线程

不,它没有。

当它再次进入发送线程循环中的readInt()位置时。

费解的。

完整传入流:-

{"frame_id":"48","get_person":true,"type":"get_person","sensor_type":"mjpeg","data_size":41,"engine_id":"rtface"}{"type": "GET_PEOPLE_RESP", "people": []}

readInt()返回:

{"frame_id":"48","get_person":true,"type":"get_person","sensor_type":"mjpeg","data_size":41,"engine_id":"rtface"}

废话。readInt()返回一个整数,而不是一个字符串。

available()返回:

{"type": "GET_PEOPLE_RESP", "people": []}

废话。available()返回一个整数,而不是一个字符串。

如何控制这一点?

如何控制什么?

编辑

现在你已经发布了你的代码,你犯了一个相当常见的错误,即假设TCP是一个面向消息的协议,但事实并非如此,并且available()可以用来分隔消息,而它不能。如果你想要消息,你必须以某种方式自己分隔它们:或者只是将输入视为字节流,然后交给另一个解析器,例如JSON流解析器,并让它做计算。

相关内容

  • 没有找到相关文章

最新更新