哪个处理器成本最高?

时间:2012-01-11 20:11:37

标签: java serial-port execution-time

我有一个班级,如此:

 private class verifierListener implements SerialPortEventListener {

    String outBuffer;
    char charBuffer;

    public void serialEvent(SerialPortEvent event) {
        if (event.isRXCHAR()) {//If data is available
            timeOut = 1000;
            lastReadTimer = System.currentTimeMillis();
            if (event.getEventValue() > 0) {//Check bytes count in the input buffer

                try {
                     byte[] buffer = verifierPort.readBytes(event.getEventValue());
                     //INSERT CODE HERE
                } catch (Exception ex) {
                    ex.printStackTrace();
                }

            }
        }

有两种可能的实施方法(在INSERT CODE HERE区域内)

案例A:

                        outBuffer = new String(buffer);


                        bfrFile.print(outBuffer);
                        sysOutWriter.append(outBuffer);

案例B:

                            for(byte bt : buffer) {
                                charBuffer = (char) bt;
                                bfrFile.print(charBuffer);
                                sysOutWriter.append(charBuffer);
                            }

编译和运行,并做他们应该做的事情。但我正在尝试尽可能无缝地执行此代码,因此我不会冒险在低端PC上丢失传输数据。

我假设案例A由于字符串初始化而会有更多的开销,但我想在删除它之前确定。

你们可以告诉哪一个更清洁,和/或如何确定每个人的处理成本?

2 个答案:

答案 0 :(得分:1)

如果你使用windows ctrl-alt-delete并在运行时查看线程并查看它使用的内存。就你的代码而言,我建议你使用StringBuilder而不是String。我不确定开销是否确实存在差异,但从良好的代码/编程角度来看,它应该是A。

答案 1 :(得分:1)

即使在低端PC上,也不应丢失任何数据。那是因为你的代码和通过串口传输的实际数据(操作系统缓冲区,Java缓冲区等)之间有(几个)缓冲区。速度方面,除非你经常使用这个代码(例如,每秒几千次),否则你不应该注意到差异。

假设这是一个标准串行连接,并且您以每秒115200位运行,这意味着您每秒最多可获得14,400个字符。即使你一次只读这一个角色,你也不应该看到很快的速度。