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

Java 查找流中最后一个英文字符的位置,java,character-encoding,inputstream,Java,Character Encoding,Inputstream,我有一个读卡器,它以流(ByteArrayInputStream)的形式接收消息包。 每个数据包包含由英文字符和二进制数字组成的数据 adghfjiyromn1000101010100...... 将字符作为序列从流中复制(而不是删除)的最有效方法是什么。 因此,上述数据包的预期输出将是(不修改原始流): 我不仅关心逻辑,还关心要使用的确切流操作例程;假设读者每秒会读3-4个数据包。 这也有助于解释为什么我们更喜欢使用特定的数据类型(byte[]、char[]或string)来解决这个问题。我

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

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

我不仅关心逻辑,还关心要使用的确切流操作例程;假设读者每秒会读3-4个数据包。

这也有助于解释为什么我们更喜欢使用特定的数据类型(byte[]、char[]或string)来解决这个问题。

我认为这是最好的方法:

1-将ByteArrayInputStream转换为字符串(或StringBuffer) 2-查找0或1的第一个索引
3-使用子字符串(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;
}

你:每个数据包包含由英文字符和二进制数字组成的数据。 Me:数据在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));

请给出输入和预期输出。
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));