gpt4 book ai didi

java - jssc getInputStream() getOutputstream()

转载 作者:行者123 更新时间:2023-12-02 03:01:10 30 4
gpt4 key购买 nike

我正在使用 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 中没有这样的方法,但我想知道是否有其他方法?

最佳答案

一种可能性是提供一个自定义的PortInputStream类,该类扩展InputStream并实现JSSC的SerialPortEventListener接口(interface)。该类从串行端口接收数据并将其存储在缓冲区中。它还提供了一个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 并写入串行接口(interface):

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);

关于java - jssc getInputStream() getOutputstream(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42341530/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com