Я пытаюсь отправить byte[]
на последовательный порт. Однако outputstream.write(byte[]);
работает только тогда, когда byte[].length
содержит менее 100 байтов.
Просто чтобы знать:
с использованием набора инструментов пружинного источника (Eclipse)
JDK 1,7
DEFAULTBAUDRATE установлен на 9600
byte[]
никогда не содержит более 476 байтов
NRSerial - это библиотека, предлагающая независимую от платформы версию библиотеки покойного vaxx.comm
к последовательному порту не подключено оборудование
Я нюхаю последовательный порт с приложением (немного похоже на wireshark)
Я еще студент, поэтому код может быть отстой: P
Этот код работает:
NRSerialPort port = new NRSerialPort(portname, DEFAULTBAUDRATE);
port.connect();
OutputStream outputStream = port.getOutputStream();
for(int i = 0; i<bytes.length; i++){
if(i%10==0){
Thread.sleep(1);
}
outputStream.write(bytes[i]);
}
outputStream.flush();
outputStream.close();
port.disconnect();
Преимущество: работает на всех системах
Недостаток: может спать без необходимости
И вот так:
NRSerialPort port = new NRSerialPort(portname, DEFAULTBAUDRATE);
port.connect();
OutputStream outputStream = port.getOutputStream();
for(byte b : bytes){
outputStream.write(b);
}
outputStream.flush();
outputStream.close();
port.disconnect();
Преимущество: без необходимости спать
Недостаток: может не работать на быстрых системах, потому что они могут обрабатывать каждую намного быстрее
Но приведенный ниже код завершится ошибкой, если байты содержат более 100 байтов:
NRSerialPort port = new NRSerialPort(portname, DEFAULTBAUDRATE);
port.connect();
OutputStream outputStream = port.getOutputStream();
outputStream.write(bytes);
outputStream.flush();
outputStream.close();
port.disconnect();
Хотя write(byte[])
является допустимым методом в библиотеке солнца
У меня есть некоторые идеи по этому поводу:
- Я переполняю выходной буфер, скорость передачи данных слишком мала для отправки этих данных сразу
write(byte[])
не режет byte[]
на мелкие кусочки
Вы можете удивиться, почему я задаю этот вопрос, если у меня есть рабочее решение. Ну:
Я хочу знать, какое из моих решений лучше и / или есть ли другой / лучший способ сделать это. кроме того, зачем создавать метод write(byte[])
, если его возможности обработки зависят от аппаратного обеспечения (по крайней мере, скажем так в JavaDoc?)