现有一读卡器,通信协议规定:发送命令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();
         }
}我发送命令的方法对吗?对读取的结果处理的方法对吗?如果不对,应该怎么处理?

解决方案 »

  1.   

    问题解决了。
    发送命令前,必须将16进制的字符串转换成为字节数组,不能通过String.getBytes()方法转化。
    接收结果后,必须将字节数组转化成为16进制的字符串。字节数组和16进制字符串的相互转化可以参见如下网址:
    http://www.javaeye.com/topic/135371
      

  2.   

    另外,上段代码中正确的读取读卡器返回结果应该这样:while (inputStream.available()>0) {
        int numBytes = inputStream.read(readBuffer);
    }