Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中DataInputOutStream的readInt()和available()函数有什么区别_Java_Android_Multithreading_Datainputstream - Fatal编程技术网

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

java中DataInputOutStream的readInt()和available()函数有什么区别,java,android,multithreading,datainputstream,Java,Android,Multithreading,Datainputstream,我需要知道如何使用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”:[]}] 问候 Janaka如果您想使用JSON,这就可以了 JsonElement e = new JsonPa

我需要知道如何使用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”:[]}]

问候
Janaka

如果您想使用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()
位置时

难以理解

完整传入流:-

readInt()
返回:

胡说八道
readInt()
返回整数,而不是字符串

available()
返回:

胡说八道
available()
返回整数,而不是字符串

如何控制

如何控制什么

编辑


既然您已经发布了代码,那么您就犯了一个相当常见的错误,即假设TCP是一个面向消息的协议,而事实并非如此,并且
available()
可以用来分隔消息,而它不能。如果您想要消息,您必须以某种方式对它们进行分隔:或者只需将输入作为字节流处理,就是这样,然后将其交给另一个解析器,如JSON流解析器,然后让它进行计算。

如何停止读取?你能在这里显示你的代码吗?我没有停止,当运行时,它会自动停止。当第一次启动线程时,它读取全部传入流,当第二次读取时,它只返回流的第一部分。什么?
available()
readInt()
都返回一个
int
,而不是一个字符串(假设DataInputStream)。我仍然无法获取它。请将您的代码粘贴在此处抱歉@Carlos Heuberger。实际上它返回了整数值。我只是通过使用int值来说明值是如何取值的。您的回答有助于修改我的问题。
{"frame_id":"48","get_person":true,"type":"get_person","sensor_type":"mjpeg","data_size":41,"engine_id":"rtface"}{"type": "GET_PEOPLE_RESP", "people": []}
{"frame_id":"48","get_person":true,"type":"get_person","sensor_type":"mjpeg","data_size":41,"engine_id":"rtface"}
{"type": "GET_PEOPLE_RESP", "people": []}