将字符串写入java中的串行端口

时间:2013-09-13 07:07:01

标签: java core

我想将一个字符串写入一个串口,但是串口写入方法只允许字节数组写入...所以如何将整个字符串发送到一个端口......这是我的代码... < / p>

      serialPort.setSerialPortParams(300,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
       OutputStream mOutputToPort = serialPort.getOutputStream();

        String mValue = "ABCDEFG";
          System.out.println("beginning to Write . \r\n");
         mOutputToPort.write(mValue.getBytes());
         System.out.println("AT Command Written to Port. \r\n");
         mOutputToPort.flush();

我不想一个接一个地发送它。我想一次整个... thnxx提前

2 个答案:

答案 0 :(得分:2)

您的代码有效(它确实会立即写入整个字符串),但这并不好。如果这是你打算做的,那么“干净”的方法就是:

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(mOutputToPort));
bw.write(mValue);
// probably "write" some more here to the buffer
bw.flush(); // now ensure accumulated data is actually written

如果你只是写一个字符串而不是更多,你也可以直接使用OutputStreamWriter而不是使用缓冲区:

OutputStreamWriter osw = new OutputStreamWriter(mOutputToPort);
osw.write(mValue, 0, mValue.length());
osw.flush();

(在Java中,Writers处理将字符写入流而不是字节。)

如果你想确保没有缓冲发生(我怀疑它有任何原因,它只会增加系统调用开销,因为串口将无论如何缓冲数据并将其发送出比代码提供的慢) ,123456789提供了合适的答案。你应该小心调用getBytes(),因为这将使用系统的默认字符编码(通常是UTF-8或ISO-8859-1,两者都适合编写纯ASCII)来从字符转换为字节。如果你想要一个特定的编码,那么在getBytes()的调用中指定它,例如

try {
    byte[] bytes = someString.getBytes("US-ASCII");
    for (int i=0; i<bytes.length; i++) 
        mOutputToPort.write(bytes[i]);    }
catch (UnsupportedEncodingException e) {} // well, this one is always supported

答案 1 :(得分:0)

尝试使用返回字节数组的getBytes()方法。

   OutputStream mOutputToPort = serialPort.getOutputStream();

    String mValue = "ABCDEFG";
      System.out.println("beginning to Write . \r\n");
     Byte[] data = mValue.getBytes();
     for(int i=0;i<data.length;i++){
     mOutputToPort.write(data[i]);}
     System.out.println("AT Command Written to Port. \r\n");
     mOutputToPort.flush();