0

我有一个阅读器,它以流(ByteArrayInputStream)的形式接收消息包。
每个数据包包含由英文字符和二进制数字组成的数据。

adghfjiyromn1000101010100......

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

adghfjiyromn

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

4

3 回答 3

0

我认为这是最好的方法:

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

于 2013-08-17T06:04:06.963 回答
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;
}
于 2013-08-17T07:13:02.347 回答
0

You :每个数据包都包含由英文字符和二进制数字组成的数据。我:数据在 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));
于 2013-08-17T09:05:17.050 回答