Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将字节数组从servlet侦听器传递到控制器_Java_Servlets_Bytearray_Listener - Fatal编程技术网

Java 将字节数组从servlet侦听器传递到控制器

Java 将字节数组从servlet侦听器传递到控制器,java,servlets,bytearray,listener,Java,Servlets,Bytearray,Listener,我有一个servlet上下文侦听器,其中有一个串行端口侦听器。在此侦听器中,我以以下方式从串行端口保存字节: public void contextInitialized(ServletContextEvent contextEvent){ context = contextEvent.getServletContext(); serial = SerialFactory.createInstance(); serial.open(Serial.DEFAULT_COM_PORT,

我有一个servlet上下文侦听器,其中有一个串行端口侦听器。在此侦听器中,我以以下方式从串行端口保存字节:

public void contextInitialized(ServletContextEvent contextEvent){
  context = contextEvent.getServletContext();
  serial =  SerialFactory.createInstance();
  serial.open(Serial.DEFAULT_COM_PORT, 19200);
  serial.addListener(new SerialDataListener(){
    @Override
    public void dataReceived(SerialDataEvent arg0) {    
    private byte[] serialDataByte;
    serialDataByte = arg0.getData().getBytes();
    context.setAttribute("serialData", serialDataByte);
    seriale.write(serialDataByte); //the echo on serial port show me the right bytes                                
    }           
  });
}
在控制器上,我通过以下方式访问串行端口数据:

private byte[] temp;
temp = (byte[]) getServletContext().getAttribute("serialData");
for(int i=0; i<temp.length;i++){
  output.println(Integer.toHexString(temp[i] & 0x00FF));    
}
长度是69。 有时在我的临时阵列中,我只有原始阵列的一小部分,有时:

aa 7f 40 a 72 0 0 0 0 0 0 0 0 0 0
有时:

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 fe 1a
有时是69字节的正确数组。 如何将从串行端口获取的准确数据传递给控制器?
提前感谢

如果有更多数据进入该端口,此代码将覆盖您最初在
serialData
上下文属性中拥有的内容。因此,仅在属性存在时写入,并考虑在最初的<代码> DATARCIEVE()/<代码>调用.< /P>之后关闭端口。
serial.addListener(new SerialDataListener(){
    @Override
    public void dataReceived(SerialDataEvent arg0) {    
        private byte[] serialDataByte;
        if (context.getAttribute("serialData") == null) {
            serialDataByte = arg0.getData().getBytes();
            context.setAttribute("serialData", serialDataByte);
            seriale.write(serialDataByte); // I assume this is only for debugging
                                           // and also supposed to be `serial`
            serial.close();
        }
    }
});

谢谢你的回答。这样,如果上下文属性不为null,如何在第一次之后保存串行数据?每秒钟一台pc就会向这个串行端口发送一个字节数组,我需要在网页上显示这个数组的一些字节。
serial.addListener(new SerialDataListener(){
    @Override
    public void dataReceived(SerialDataEvent arg0) {    
        private byte[] serialDataByte;
        if (context.getAttribute("serialData") == null) {
            serialDataByte = arg0.getData().getBytes();
            context.setAttribute("serialData", serialDataByte);
            seriale.write(serialDataByte); // I assume this is only for debugging
                                           // and also supposed to be `serial`
            serial.close();
        }
    }
});