我需要知道如何表现 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流解析器,并让它做计算。