Java 需要从Inputstream读取数据的帮助吗

Java 需要从Inputstream读取数据的帮助吗,java,inputstream,lejos-nxj,Java,Inputstream,Lejos Nxj,我有一个机器人和一个运行在GUI上的GUI应用程序。我在机器人端有一个while循环,它不断地向GUI发送数据 在我发送一个值之前,我首先发送一个值,GUI将使用该值来确定以后必须读取多少个连续值,例如,我发送如下内容: dataout.writeInt(2); dataout.writeInt(50); dataout.writeInt(506); dataout.writeInt(50); dataout.flush 在这里,GUI读取2,然后在案例2中,它将读取接下来的两个整数 在GU

我有一个机器人和一个运行在GUI上的GUI应用程序。我在机器人端有一个while循环,它不断地向GUI发送数据

在我发送一个值之前,我首先发送一个值,GUI将使用该值来确定以后必须读取多少个连续值,例如,我发送如下内容:

dataout.writeInt(2);
dataout.writeInt(50);
dataout.writeInt(506);
dataout.writeInt(50);
dataout.flush 
在这里,GUI读取2,然后在案例2中,它将读取接下来的两个整数

在GUI端,我有一个i while循环,它位于一个线程的run()中,该线程正在连续读取inputstream

在GUI的循环中,我有一个switch case语句

范例

while(true){
int val = dataIn.readIn()

switch(val){

    case 1:
            int color = readInt();
      break;

case 2:
         int me= readInt();
         int you= readInt();
      break;

case 3:
         int megg = readInt();
         int youss = readInt();
          int mes = readInt();
         int youe = readInt();
      break;

}

} 
t没有按我想的那样工作。这就是我得到的:

2
1761635840
1946182912
1845523456
1761636096
1845523200
1006658048
16274152968 
在它读取第一个int之后,我得到一系列它从inputstream读取的数字。我不知道这些数字是从哪里来的

我想如果它不能读取我发送的数字,那么它必须阻止,但事实并非如此

对于上面的示例,我得到的是:

2
1761635840
1946182912
1845523456
1761636096
1845523200
1006658048
16274152968 
2之后的所有数字,我不知道它们来自哪里。它不会读取我发送的2之后的数字

我试图插入一些线程。睡眠(1000)但不起作用

我做错了什么?需要帮助吗

代码


文本是否
意图文本是否
意图您是对的。非常感谢你。我现在得到了不同的数字。1677721600 184549376 1694498816 184549376 1694498816请告诉我您如何转换数字,以便我可以使用它来解决其余的问题。谢谢你的帮助,我只是用Windows计算器转换成十六进制,然后在ASCII表中查找每个字节。但是我会发布一个Java snippit,它也有同样的功能。顺便说一句,你似乎不再阅读字符了。看看你的写作和阅读情况会很有用。特别是,无论何时使用DataInput/OutputStream,您的操作和排序都必须严格对称。谢谢您的帖子。机器人不断地向GUI发送信息,我必须读取这些信息才能更新GUI。有什么建议吗?我认为从while循环读取是最好的方法。从while循环读取是好的。但是你没有给出一个正确的例子,所以我不能告诉你你是否做得很好。例如,您的示例(readIn?)中有输入错误,您还没有说明
readInt()
是否应该是
dataIn.readInt()
,或者它是否是您在其他地方定义的方法。另外,你的例子并不一致:在写作中,你在“2”之后写三个整数,但当你阅读时,你在阅读“2”之后只读两个整数。请你说得对。非常感谢你。我现在得到了不同的数字。1677721600 184549376 1694498816 184549376 1694498816请告诉我您如何转换数字,以便我可以使用它来解决其余的问题。谢谢你的帮助,我只是用Windows计算器转换成十六进制,然后在ASCII表中查找每个字节。但是我会发布一个Java snippit,它也有同样的功能。顺便说一句,你似乎不再阅读字符了。看看你的写作和阅读情况会很有用。特别是,无论何时使用DataInput/OutputStream,您的操作和排序都必须严格对称。谢谢您的帖子。机器人不断地向GUI发送信息,我必须读取这些信息才能更新GUI。有什么建议吗?我认为从while循环读取是最好的方法。从while循环读取是好的。但是你没有给出一个正确的例子,所以我不能告诉你你是否做得很好。例如,您的示例(readIn?)中有输入错误,您还没有说明
readInt()
是否应该是
dataIn.readInt()
,或者它是否是您在其他地方定义的方法。另外,你的例子并不一致:在写的时候,你在“2”之后写三个整数,但是当你读的时候,你在读“2”之后只读两个整数。
int input = 184549376 ;
byte[] bytes = { (byte)(input >> 24), (byte)(input >> 16),
        (byte)(input >> 8), (byte)(input) };
System.out.printf("int: %d hex: %08X string: %s",
        input, input, new String(bytes));