SerialPortManager icon indicating copy to clipboard operation
SerialPortManager copied to clipboard

关于 BufferSize

Open A6688440 opened this issue 2 years ago • 8 comments

你好,SerialPortManager的作者,SerialPortManager是一个很好的工具,为此我特意点上小星星,而目前我发现一个现象 在连接上后,如果接收的内容大于128,会报异常java.lang.ArrayIndexOutOfBoundsException: length=128; index=128 如果我设置上setBufferSize(xx)第一次接收只要还是大于128的,就会异常一次java.lang.ArrayIndexOutOfBoundsException: length=128; index=128,后续接收都是正常,分析原因是可能是setBufferSize的时候,内部有些对象已经生成好,并没有及时更新指定大小的。

SerialPortManager.class 20 ---private int bufferSize = 128; 21----private byte[] buffer = new byte[bufferSize];//已经生成

//未更新 59--- public void setBufferSize(int bufferSize) { 60--- this.bufferSize = bufferSize; 61---- }

A6688440 avatar Dec 01 '22 03:12 A6688440

是的.的确有这个问题.感谢您的指正

547394 avatar Dec 01 '22 03:12 547394

但是我有看到在发送和接收时都有重建过缓冲区, 请问您这调用的时机?

547394 avatar Dec 01 '22 03:12 547394

我是在打开串口前调用的。 //-------------------------------------- val sttyS0 = SerialPortManager() sttyS0.setReceivedTimeout(100) sttyS0.setOnDataListener(object : OnDataListener(){....} sttyS0.setBufferSize(1024) if (!sttyS0.isOpen) { sttyS0.open("/dev/ttyS0", 115200) } //--------------------------------------

发送接口 sendBytes 是看到有重建缓冲区sendNext()。

onDataReceived 这是实现接收回调的接口,在SerialPortManager 102行 SerialPortManager.this.onDataReceived(bytes); 看到是在异常的时候才会重建,和接收完毕后clean()重建。

然后我进行断点 ,发现是也是在SerialPortManager 102行 SerialPortManager.this.onDataReceived(bytes); 这里被捕获的,追溯到内部数在 214------ buffer[bufferLength++] = aByte; for循环执行128次后抛出的异常。

您可以尝试一下,如果有什么后续优化,或者我的调用方式改进意见。希望告知我一声,谢谢。

A6688440 avatar Dec 01 '22 05:12 A6688440

目前我采用 打开串口后,调用一次sendBytes(byte[] bytes, SerialPortProtocol protocol, OnReportListener listener) 一次,用于更新buffer,结果是正常使用。

A6688440 avatar Dec 01 '22 05:12 A6688440

今天上午时已针对您提出来的问题已经做过修改.稍等下我重新打包一下.

547394 avatar Dec 01 '22 05:12 547394

好的,谢谢!

A6688440 avatar Dec 01 '22 05:12 A6688440

请尝试更新1.0.12 因目前手上有没有串口设备所以只是盲改.应该没啥问题.

547394 avatar Dec 01 '22 05:12 547394

您好,目前已经更新完毕,也在项目中尝试使用了,目前使用正常,问题已被修复。谢谢,后续若有其他,我将再继续反馈!

A6688440 avatar Dec 01 '22 06:12 A6688440