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

时间:2018-01-09 09:14:31

标签: java android multithreading datainputstream

我需要知道如何使用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

2 个答案:

答案 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流解析器,并让它进行计算。