我有一个在GUI上运行的机器人和GUI应用程序。我在机器人方面有一个while循环,它不断地向GUI发送数据。
在我发送一个值之前,我首先发送一个值,GUI将使用该值来确定之后必须读取多少个连续值,例如我发送的内容;
dataout.writeInt(2);
dataout.writeInt(50);
dataout.writeInt(506);
dataout.writeInt(50);
dataout.flush
这里GUI读取2然后在案例2下,它将读取接下来的两个整数。
在GUI端,我有一个while循环,它位于从输入流连续读取的线程的run()中。
在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无法正常工作。这就是我得到的:
在读取第一个int之后,我得到了一系列从输入流中读取的数字。我不知道这些数字来自哪里。
我认为如果它无法读取我发送的数字,那么它必须阻止,但事实并非如此。
对于上面的例子,这就是我得到的:
2
1761635840
1946182912
1845523456
1761636096
1845523200
1006658048
16274152968
2之后的所有数字,我不知道它们来自哪里。在发送2之后它没有读取数字。
我尝试插入一些Thread.sleep(1000),但无效。
我做错了什么?需要帮助
CODE
//This code on the robot
public class ForkliftColorSensorReader implements Runnable{
DataOutputStream outputStream;
ColorSensor colorSensor;
public ForkliftColorSensorReader(ColorSensor colorSensor, DataOutputStream outputStream) {
this.outputStream = outputStream;
this.colorSensor = colorSensor;
}
public void run() {
int code = 1;
while (code == 1){
try {
Thread.sleep(1000);
outputStream.writeInt(10);
outputStream.flush();
outputStream.writeInt(2);
outputStream.flush();
} catch (Exception e) {
}
}
try {
Thread.sleep(1000);
outputStream.writeInt(20);
outputStream.flush();
outputStream.writeInt(4);
outputStream.flush();
} catch (Exception e) {
}
}
}
}
//This code on the GUI
public class Receive implements Runnable{
int num = this.dataIn.readInt();
public void run(){
switch(num){
case 10:
int color = this.dataIn.read();
break;
case 20:
int c = this.dataIn.read();
break;
default;
}
}
}
// I am using NXTConnector from the GUI to make the connection to the robot.
//I then use the DataOutputstream from the connection to read the data
答案 0 :(得分:1)
文字intentions<b
对您有意义吗?你正在从输入流中读取它;这就是那些数字在某个字符集中对应的内容。我的猜测是你有一些HTML写入输出流。你确定你只是同时写入DataOutputStream而不是底层的OutputStream吗?那么,你真正读到的代码是什么样的?如果是这样,readInt()方法是如何定义的?
编辑:Snippit可以解决上述问题。
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));
编辑#2 :在您的代码中,您使用writeInt()
撰写并阅读read()
这是完全那种非对称性我在说什么。您必须使用readInt()
来阅读使用writeInt()
编写的字段。 InputStream.read()
,您正在使用的内容,读取一个字节数据并将其存储在int中。不是你想要的。