需要帮助从Inputstream读取数据

时间:2010-07-28 13:34:03

标签: 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下,它将读取接下来的两个整数。

在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

1 个答案:

答案 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中。不是你想要的。