现有一读卡器,通信协议规定:发送命令0200fb00013060bc03,可以得到结果02FB000804304406C8CD678007E06BDC03。我用java写了一个读读卡器的程序。使用sun提供的javacomm20-win32.zip进行串口通信。读写读卡器的程序代码如下: String cmd="0200fb00013060bc03";
try{
//发送命令
outputStream=serialPort.getOutputStream();
outputStream.write(cmd.getBytes());
//读取命令结果
byte[] readBuffer = new byte[20];
try {
inputStream=serialPort.getInputStream();
ByteArrayOutputStream bos=new ByteArrayOutputStream();
int numBytes = inputStream.read(readBuffer);
while (numBytes!=-1) {
bos.write(readBuffer,0,numBytes);
numBytes = inputStream.read(readBuffer);
} System.out.print(new String(readBuffer));
} catch (IOException ie) {
ie.printStackTrace();
}finally{
try{
if(inputStream!=null){
inputStream.close();
}
inputStream=null;
}catch(Exception e){
e.printStackTrace();
}
}
}catch(IOException ie){
ie.printStackTrace();
}finally{
try{
if(outputStream!=null){
outputStream.close();
}
outputStream=null;
}catch(Exception e){
e.printStackTrace();
}
}我发送命令的方法对吗?对读取的结果处理的方法对吗?如果不对,应该怎么处理?
try{
//发送命令
outputStream=serialPort.getOutputStream();
outputStream.write(cmd.getBytes());
//读取命令结果
byte[] readBuffer = new byte[20];
try {
inputStream=serialPort.getInputStream();
ByteArrayOutputStream bos=new ByteArrayOutputStream();
int numBytes = inputStream.read(readBuffer);
while (numBytes!=-1) {
bos.write(readBuffer,0,numBytes);
numBytes = inputStream.read(readBuffer);
} System.out.print(new String(readBuffer));
} catch (IOException ie) {
ie.printStackTrace();
}finally{
try{
if(inputStream!=null){
inputStream.close();
}
inputStream=null;
}catch(Exception e){
e.printStackTrace();
}
}
}catch(IOException ie){
ie.printStackTrace();
}finally{
try{
if(outputStream!=null){
outputStream.close();
}
outputStream=null;
}catch(Exception e){
e.printStackTrace();
}
}我发送命令的方法对吗?对读取的结果处理的方法对吗?如果不对,应该怎么处理?
发送命令前,必须将16进制的字符串转换成为字节数组,不能通过String.getBytes()方法转化。
接收结果后,必须将字节数组转化成为16进制的字符串。字节数组和16进制字符串的相互转化可以参见如下网址:
http://www.javaeye.com/topic/135371
int numBytes = inputStream.read(readBuffer);
}