再次需要帮助从输入流中读取数据

时间:2010-07-29 14:26:09

标签: java inputstream lejos-nxj

昨天我发布了一个关于输入流阅读问题的问题,我得到了帮助。

我发现自己处于类似的情况,但这一次我知道我做的是正确的事,但它对我不起作用。

我正在从输入流中读取,但我得到了不同的价值。无论我如何更改我发送的数据,我都会得到相同的字符串(“toForklift-42”)作为值。首先,我用“toForklift-”前缀我发送的值,但我已将该字符串更改为不同的字符串,但我在括号中得到相同的字符串。我甚至将数字42更改为不同的数字但是当我运行程序时,我在控制台中得到相同的字符串。以下是发送内容:as

两个发送和接收类。

使用leJOS NXJ NXTConnector建立连接并打开流。

// sender class

class PanButton implements Runnable {

    DataInputStream dis;
    DataOutputStream dos;
    TouchSensor touch = new TouchSensor(SensorPort.S4);





    PanicButtonCrossing(DataInputStream is, DataOutputStream os) {
    dos = os;
    dis = is;
    }

    public void run() {

        while (!touch.isPressed())  {}

            // If you get a message: KILL EVERYTHING    
            Motor.A.stop();
            Motor.B.stop();
            Motor.C.stop();

            try { // send 42
                int value = 42;

                dos.writeChars("ggggggggg" + 455 + "\n"); 
                dos.flush();
                Sound.systemSound(true, 3);
            } catch (IOException ioe) {
                LCD.drawString("Write Exception", 0, 0);
            }

            System.exit(1);


}






// Reader classs



public class InputReaderCrossing  implements Runnable{


      private DataInputStream dataIn;
      private DataOutputStream dataOut;

public InputReaderCrossing(DataInputStream dataIn, DataOutputStream dataOut) {
            this.dataIn = dataIn;
            this.dataOut = dataOut;
            this.sensor = sensor;
            this.readLock = new Object();

        }


public void run(){

while(true){

String dataFromCrossing1 = readLineFromCrossing();
System.out.println("CROSSING VALUE: " + dataFromCrossing1  + "  :VALUEEEEE");
}

}

private String readLineFromCrossing() throws IOException{ 
              StringBuffer sb = new StringBuffer(); 

              synchronized(readLock){ 
                 while(true) { 
                    char c = this.dataIn.readChar(); 
                    if (c == '\n') break; 
                    sb.append(c);
                 }
                 return sb.toString(); 
              } 
           }


}

我需要你的帮助。我花了6个小时但找不到原因。我不明白无论发送什么,我都会得到“toForklift-42”。

起初我尝试使用writeInt()方法发送42但是然后在读者类方面我使用readInt()但我得到的东西如下:

745687894
459877455
456987456

所以我改变了字符串以找出原因并且看哪,无论发送什么,我都会得到那个字符串。就像在输入流中固定字符串一样,没有发送任何内容。我不知道发生了什么。

需要帮助

1 个答案:

答案 0 :(得分:0)

这是一个非常令人困惑的问题。我们真的不知道哪个进程正在编写哪些数据,以及它是如何传输的,以及哪个进程正在捡起它。这里有一些相关的代码,但我没有看到足够的故事。 dataFromCrossing1是如何得到它的价值的?

我认为以这样一种方式组织你的问题会很好,你可以向外人询问有关它的问题。可能在这样做的过程中,您可能会自己偶然发现解决方案。

原则上,如果您在程序中更改字符串常量但仍然看到相同的输出,那么正在发生的是

  • 原始程序仍在运行;或
  • 所有版本,因为原来有错误,所以你曾经成功编译的类文件一次又一次地运行;或
  • 你并没有真正运行你认为正在运行的程序。