好的?我正在尝试将C#代码转换成Java,…遇到了一些问题
我在试着读一个串口,
Global
private InputStream inputStream;
private OutputStream outputStream;outputStream = serialPort.getOutputStream();
inputStream = serialPort.getInputStream();发送数据,是正确的,问题是时间去读它。
在C#中,我有一个接收方法:
public void recepcaoResposta(int tam, byte[] frameHex)
{
byte[] l_frameHex = new byte[2000];
byte[] frameEvt = new byte[16];
string linha, linhaTipo;
// !! Copia vetor-parâmetro para vetor-local (evita exception nos "if's"
//caso apenas 1 byte recebido) !!
Buffer.BlockCopy(frameHex, 0, l_frameHex, 0, tam);
.....
}转换为Java如下所示:
public void recepcaoResposta(int tam, byte[] frameHex) {
byte[] l_frameHex = new byte[2000];
byte[] frameEvt = new byte[16];
String linha, linhaTipo;
// !! Copia vetor-parâmetro para vetor-local (evita exception nos "if's"
//caso apenas 1 byte recebido) !!
System.arraycopy(frameHex, 0, l_frameHex, 0, tam);
...
}到目前为止,问题是获取tam的时间,也就是数组的大小。在java中,我返回的大小为8,无论我做什么,都会返回8。
我甚至试图把“随机”数字大小改为8。但很明显我有错误.
@Override
public void serialEvent(SerialPortEvent event) {
switch (event.getEventType()) {
case SerialPortEvent.DATA_AVAILABLE:
try {
while (inputStream.available() > 0) {
// int t = inputStream.read();
int t = serialPort.getDataBits();
byte[] f = new byte[t];
inputStream.read(f, 0, t); // Frame de bytes
recepcaoResposta(t, f);
}
} catch (IOException e) {
System.out.println("IO Exception in SerialEvent()" + e);
}
break;
}
}但是如前所述,我只有8大小的返回,在上面的代码中是:
int t = serialPort.getDataBits();结果基本上是这样的:
TAM:8
l_frameHex[1]12
TAM:8
l_frameHex[1]23发布于 2019-12-20 05:02:15
嗯,我试了很多次,结果还是很好的:
public static InputStream inputStream;
public static OutputStream outputStream;
@Override
public void serialEvent(SerialPortEvent evt) {
switch (evt.getEventType()) {
case SerialPortEvent.BI:
//Quebra interupção.
case SerialPortEvent.OE:
//Erro de saturação.
case SerialPortEvent.FE:
//Erro de enquadramento.
case SerialPortEvent.PE:
//Erro de pariedade.
case SerialPortEvent.CD:
//Detecção de portadora.
case SerialPortEvent.CTS:
//Limpa para enviar.
case SerialPortEvent.DSR:
//Conjunto de dados prontos.
case SerialPortEvent.RI:
//Caminho indicado.
case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
/*Buffer de saída está vazio. O evento será gerado depois de uma gravação for concluída,
quando o buffer do sistema torna-se vazia novamente..."
*/
break;
case SerialPortEvent.DATA_AVAILABLE:
/*Dados disponíveis na porta serial. "
+ "Este evento será gerada uma vez quando dados novos chegam na porta de série. "
+ "Mesmo se o usuário não ler os dados, "
+ "não será gerado novamente até a próxima vez que novos dados chegam");
*/
try {
TimeUnit.MILLISECONDS.sleep(500); //
} catch (InterruptedException e) {
}
byte[] readBuffer = new byte[1024];
try {
int numBytes = 0;
while (inputStream.available() > 0) {
numBytes = inputStream.read(readBuffer);
}
String result = new String(readBuffer);
result = result.substring(0, numBytes);
System.out.println(result + "\n");
} catch (IOException e) {
}
break;
}
}https://stackoverflow.com/questions/59347927
复制相似问题