0

我想向串口写入一个字符串,但串口写入方法只允许写入字节数组......所以我怎样才能将整个字符串发送到一个端口......这是我的代码......

      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提前

4

2 回答 2

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
于 2013-09-13T07:44:08.303 回答
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();
于 2013-09-13T07:11:13.227 回答