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”:[]}] 问候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
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": []}