jssc getInputStream()getOutputstream()

时间:2017-02-20 10:02:57

标签: java serial-port jssc xmodem

我使用jssc库通过串口与设备通信。 在标准的java SerialComm库中,有两个方法getInputStream()和getOutputStream()。

为什么我需要这个?我想根据this示例实现Xmodem,而xmodem构造函数需要两个参数:

public Xmodem(InputStream inputStream, OutputStream outputStream) 
{
     this.inputStream = inputStream;
     this.outputStream = outputStream;
}


Xmodem xmodem = new Xmodem(serialPort.getInputStream(),serialPort.getOutputStream());

在jssc中没有这样的方法,但我想知道是否有其他方法?

1 个答案:

答案 0 :(得分:1)

一种可能性是提供扩展InputStream并实现JSSCs SerialPortEventListener接口的自定义read()类。此类从串行端口接收数据并将其存储在缓冲区中。它还提供了private class PortInputStream extends InputStream implements SerialPortEventListener { CircularBuffer buffer = new CircularBuffer(); //backed by a byte[] @Override public void serialEvent(SerialPortEvent event) { if (event.isRXCHAR() && event.getEventValue() > 0) { // exception handling omitted buffer.write(serialPort.readBytes(event.getEventValue())); } } @Override public int read() throws IOException { int data = -1; try { data = buffer.read(); } catch (InterruptedException e) { // exception handling } return data; } @Override public int available() throws IOException { return buffer.getLength(); } 方法来从缓冲区获取数据。

PortOutputStream

同样,您可以提供扩展OutputStream并写入串行接口的自定义private class PortOutputStream extends OutputStream { SerialPort serialPort = null; public PortOutputStream(SerialPort port) { serialPort = port; } @Override public void write(int data) throws IOException,SerialPortException { if (serialPort != null && serialPort.isOpened()) { serialPort.writeByte((byte)(data & 0xFF)); } else { // exception handling } // you may also override write(byte[], int, int) } 类:

Xmodem

在实例化// omitted serialPort initialization InputStream pin = new PortInputStream(); serialPort.addEventListener(pin, SerialPort.MASK_RXCHAR); OutPutStream pon = new PortOutputStream(serialPort); Xmodem xmodem = new Xmodem(pin,pon); 对象之前,必须创建两个流:

foreach (var item in Model)
{
  <input type="checkbox" name="BooksToCart" id="BooksToCart-@item.BookId"    value="@item.BookId">
  <input type="number" name="NoBooksToCart" id="NoBooksToCart-@item.BookId">
}