我需要知道如何使用readInt()和available()函数来读取数据流
e.g: - [{" frame_id":" 48"" get_person":真,"类型":" get_person",& #34; SENSOR_TYPE":" MJPEG"" DATA_SIZE":41," engine_id":" rtface"} {&#34 ;输入":" GET_PEOPLE_RESP","人物":[]}]
此致 Janaka
答案 0 :(得分:1)
如果您想使用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");
答案 1 :(得分:0)
为了读取数据,我使用了
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流解析器,并让它进行计算。