Java套接字侦听器加载问题

时间:2010-01-30 06:32:16

标签: java string split listener

我在Java中创建了一个套接字侦听器,它侦听两个端口上的数据,并对侦听的数据进行操作。现在的情况是,当监听器和传输数据的设备都启动并运行时,监听器一次接收一个数据(每个数据以“#S”开头,以“。”结束)如果侦听器未启动或未侦听,则设备会将数据存储在其本地内存中,并且只要侦听器启动,它就会发送附加表单中的所有数据,如:

"#S ...DATA...[.]#S...DATA...[.]..."

现在我已经实现了这一点,无论侦听器在任何端口上获得什么数据,它都会转换为十六进制形式,然后对输入数据的十六进制格式执行操作。“#S的十六进制形式“是”2353“和十六进制形式的”。“是“2e”。用于处理输入数据的十六进制转换形式的代码如下。 hexconverted1是一个字符串,包含整个输入数据的十六进制转换形式,它出现在任何端口上。

String store[];
store=hexconverted1.split("2353"); 
for(int m=0;m<store.length;m++)
    store[m]="2353"+store[m];

 PrintWriter out2 = new PrintWriter(new BufferedWriter(new FileWriter("C:/Listener/array.bin", true)));
    for(int iter=0;iter<store.length; iter++)
        out2.println(store[iter]);
    out2.close();

我试图通过上面的代码完成的是,每当一堆数据到达时,我正在尝试扫描数据并从串中查出每个数据并存储在字符串数组中,以便我希望在数据的十六进制转换形式上执行的操作可以更容易的方式完成。因此,当我将数组的内容写入BIN文件时,输出会因同一输入而异。当我发送280个数据包的成束数据时,一个接一个地附加,有时,数组包含180,其他时间为270.但是对于较小的束大小,我得到了所需的结果,'store'数组的大小是也如预期的那样。

我对最新情况一无所知,任何指针都会有很大的帮助。

为了使事情更加清晰,我在端口上获得的数据几乎是不可读的,并且通常唯一可读的部分是起始位“#S”和结束位“。”。所以我使用BufferedInputStreamInputStream的组合来读取传入的数据并将其转换为十六进制格式,我很确定转换为十六进制就好了。

1 个答案:

答案 0 :(得分:0)

  

我使用BufferedInputStream和InputStream的组合来读取传入的数据

抓住稻草在这里。如果您使用InputStream和BufferedInputStream方法从Stream读取,您将遇到困难:

InputStream is = ...
BufferedInputStream bis = new BufferedInputStream(is);

// This is OK
int b = bis.read();
...
// Reading the InputStream directly at this point is liable to
// give unpredictable results.  It is likely that some bytes still
// remain in "bis"'s buffer, and a read on "is" will not return them.
int b2 = is.read();