private void sendData(byte[] data) { int maxShieldFrameBytes = (MAX_OUTPUT_BYTES - 3) / 2; ArrayList<byte[]> subArrays = new ArrayList<>(); for (int i = 0; i < data.length; i += maxShieldFrameBytes) { byte[] subArray = (i + maxShieldFrameBytes > data.length) ? ArrayUtils.copyOfRange(data, i, data.length) : ArrayUtils.copyOfRange(data, i, i + maxShieldFrameBytes); subArrays.add(subArray); } synchronized (sendingDataLock) { for (byte[] sub : subArrays) sysex(SERIAL_DATA, sub); } }