Нужна помощь в чтении данных из Inputstream - PullRequest
1 голос
/ 28 июля 2010

У меня есть робот и приложение с графическим интерфейсом, работающие на графическом интерфейсе. У меня есть цикл while на стороне робота, который постоянно отправляет данные в графический интерфейс.

Перед отправкой значения я сначала отправляю значение, которое GUI будет использовать, чтобы определить, сколько последовательных значений он должен прочитать впоследствии, например, я отправляю что-то вроде;

dataout.writeInt(2);
dataout.writeInt(50);
dataout.writeInt(506);
dataout.writeInt(50);
dataout.flush 

Здесь GUI читает 2, а затем в случае 2 будет читать следующие два целых числа.

На стороне GUI у меня есть цикл while, который выполняется () в потоке, который непрерывно читает поток ввода.

Внутри цикла в графическом интерфейсе у меня есть инструкция переключения регистра.

Пример

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), но он не работает.

Что я делаю не так? Нужна помощь

код

//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 Ответ

1 голос
/ 28 июля 2010

Текст intentions<b что-нибудь значит для вас?Вы читаете это из вашего входного потока;это то, что эти цифры соответствуют в определенном наборе символов.Я думаю, у вас есть немного записи HTML в ваш выходной поток.Вы уверены, что пишете ТОЛЬКО в DataOutputStream, а не в базовый OutputStream одновременно?Кроме того, это действительно то, что вы читаете код выглядит?Если да, то как определяется метод readInt ()?

EDIT : фрагмент кода для отработки вышеописанного.

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));

EDIT # 2 : В вашем коде вы пишете с writeInt() и читаете с read() Это точно тот тип несимметрии, о котором я говорил.Вы должны использовать readInt() для чтения поля, которое было написано с writeInt().InputStream.read(), то, что вы используете, читает один байт данных и сохраняет их в int.Не то, что вы хотите.

...