gpt4 book ai didi

java - 需要帮助从输入流读取数据

转载 作者:太空宇宙 更新时间:2023-11-04 08:50:57 25 4
gpt4 key购买 nike

我有一个机器人和一个在 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;

}

}

它没有按我想要的方式工作。这就是我得到的:

在读取第一个 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

最佳答案

文字是intentions<b吗?对你来说有什么意义吗?您正在从输入流中读取该内容;这就是这些数字在特定字符集中对应的内容。我的猜测是您已经向输出流写入了一些 HTML 内容。您确定只写入 DataOutputStream 而不是同时写入底层 OutputStream 吗?另外,这真的是你读到的代码的样子吗?如果是这样,readInt()方法是如何定义的?

编辑:用于计算上述内容的片段。

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

关于java - 需要帮助从输入流读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3353350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com