在流中查找最后一个英文字符的位置

时间:2013-08-17 05:35:38

标签: java character-encoding inputstream

我有一个读取器接收消息包作为流(ByteArrayInputStream) 每个数据包包含由英文字符后跟二进制数字组成的数据。

adghfjiyromn1000101010100......

将此流中的字符作为序列复制(而非剥离)的最有效方法是什么。 因此,上述数据包的预期输出将是(不修改原始流):

adghfjiyromn

我不仅关注逻辑,还关注要使用的确切流操作例程;考虑到读者每秒假设读取大约3-4个数据包。
它还有助于提供理由,说明为什么我们更喜欢特定的数据类型(byte [],char []或字符串)来解决这个问题。

3 个答案:

答案 0 :(得分:0)

我认为这是最好的方式:

1将您的ByteArrayInputStream转换为String(或StringBuffer) 2 - 找到0或1的第一个索引 3用子串(0,FIRST_INDEX)

答案 1 :(得分:0)

我认为最好的方法是逐字节读取ByteArrayInputStream:

ByteArrayInputStream msg = ...
int c;
String s;
while ((c = msg.read())!= -1) {
  char x = (char) c;
  if (x=='1' || x=='0') break;
  s += x;
}

答案 2 :(得分:0)

您:每个数据包包含由英文字符后跟二进制数字组成的数据。 我:数据在bytearrayinputstream中,因此一切都是二进制的。 你的1000101010100 ......是字符'1'和& '0'?

如果是的话

ByteArrayInputStream msg =  //whatever
        int totalBytes = msg.available();
        int c;
        while ((c = msg.read())!= -1) {
          char x = (char) c;
          if (x=='1' || x=='0') break;
        }
        int currentPos = msg.available() + 1; //you need to unread the 1st 0 or 1
        System.out.println("Position = "+(totalBytes-currentPos));