java read bytes 阻塞_java – RXTX串行连接 – 阻塞read()的问题

我试图使用RXTX库来阻止Windows上的串行通信(XP和7).我已经在两端测试了与Hyperterminal的连接,并且它完美无缺.

我使用以下代码设置连接:(为清楚起见,省略了异常处理和防御性检查)

private InputStream inStream;

private OutputStream outStream;

private BufferedReader inReader;

private PrintWriter outWriter;

private SerialPort serialPort;

private final String serialPortName;

public StreamComSerial(String serialPortName) {

this.serialPortName = serialPortName;

CommPortIdentifier portIdentifier;

portIdentifier = CommPortIdentifier.getPortIdentifier(serialPortName);

CommPort commPort = null;

commPort = portIdentifier.open(this.getClass().getName(),500);

serialPort = (SerialPort) commPort; serialPort.setSerialPortParams(4800,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);

inStream = serialPort.getInputStream();

outStream = serialPort.getOutputStream();

inReader = new BufferedReader(new InputStreamReader(inStream, Settings.getCharset()));

outWriter = new PrintWriter(new OutputStreamWriter(outStream, Settings.getCharset()));

我用的时候

outWriter.println("test message");

flush();

在另一端收到的消息很好,但是打电话

inReader.readLine()

imidiately返回“java.io.IOException:底层输入流返回零字节”.

然后我决定尝试实现自己的阻塞读取逻辑并写下:

public String readLine() throws IOException {

String line = new String();

byte[] nextByte = {-1};

while (true) {

nextByte[0] = (byte)inStream.read();

logger.debug("int read: " + nextByte[0]);

if (nextByte[0] == (byte)-1) {

try {

Thread.sleep(100);

} catch (InterruptedException e) {

e.printStackTrace();

}

continue;

}

logger.debug("byte read: " + nextByte[0]);

line = line + new String(nextByte);

if (nextByte[0] == (byte)13) { // 13 is carriage return in ASCII

return line;

}

}

}

但是这段代码进入无限循环并且“nextByte [0] =(byte)inStream.read();”无论通过串行连接发送什么,都会分配-1.另外,另一端非常糟糕,只允许我每1-3秒发送一个角色.如果我尝试在短暂的爆发中发送许多字符,并且会挂起很长时间.

任何帮助非常感谢.

* edit – 使用inStream.read(nextByte)而不是“nextByte [0] =(byte)inStream.read();”不写入nextByte变量,无论我通过串行连接发送给它.

* edit2 – 由于我的代码与SUN javax.comm lib以及我从朋友那里获得的win32com.dll完美运行,我已经停止尝试使其与RXTX一起使用.我对解锁通信不感兴趣,这似乎是其他人可以使RXTX工作的唯一方式.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值