【发布时间】:2014-07-16 05:03:47
【问题描述】:
我有一个由串行端口事件填充的字节数组,代码如下所示:
private InputStream input = null;
......
......
public void SerialEvent(SerialEvent se){
if(se.getEventType == SerialPortEvent.DATA_AVAILABLE){
int length = input.available();
if(length > 0){
byte[] array = new byte[length];
int numBytes = input.read(array);
String text = new String(array);
}
}
}
变量text 包含以下字符,
"\033[K", "\033[m", "\033[H2J", "\033[6;1H" ,"\033[?12l", "\033[?25h", "\033[5i", "\033[4i", "\033i" and similar types..
到目前为止,我使用String.replace 从字符串中删除所有这些字符。
我尝试过new String(array , 'CharSet'); //Tried with all CharSet options,但无法删除它们。
有什么方法可以在不使用替换方法的情况下删除这些字符?
【问题讨论】:
-
你确定你从这个端口收到的内容是基于文本的吗?
-
@Oleg Estekhin 我得到 [SquareSymbol] ,它是转义序列 \033 后跟我显示的任何内容。例如 [Square][k 这样的。
-
input.available()不是检查输入流中实际可用字节数的可靠方法,您应该使用InputStream.read(byte[],int,int)上的正确循环替换该部分代码,否则您正在阅读不完整随机长度的数据块。 -
另外,
input.read(array)不能保证读取完整的数组,因此您当前的代码首先无法确定流中真正可用的字节数,然后甚至无法读取错误确定的数量字节数。 -
@OlegEstekhin input.read(array, ?, ?) 你能给我一个小例子吗.. 或者一个链接开始。
标签: java string character-encoding ascii