我想将一个字符串写入一个串口,但是串口写入方法只允许字节数组写入...所以如何将整个字符串发送到一个端口......这是我的代码... < / 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提前
答案 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();