繁体   English   中英

再次需要帮助来从Inputstream读取数据

[英]Need Help Again Reading Data From Inputstream

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

我发现自己处在类似的情况,但是这次我知道我做对了,但对我却没有用。

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

发送和接收两个类。

我正在使用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

因此,我更改为字符串,以找出原因,瞧,无论我发送什么,我都会得到该字符串。 就像字符串固定在输入流中,什么也不发送。 我不知道发生了什么

需要帮忙

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

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

原则上,如果您在程序中更改字符串常量,但仍继续看到相同的输出,那么实际情况是

  • 原始程序仍在运行; 要么
  • 自原始版本以来的所有版本都有错误,因此您一次成功编译的类文件将一次又一次地运行; 要么
  • 您实际上并没有运行您认为正在运行的程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM