我有一个读取器接收消息包作为流(ByteArrayInputStream) 每个数据包包含由英文字符后跟二进制数字组成的数据。
adghfjiyromn1000101010100......
将此流中的字符作为序列复制(而非剥离)的最有效方法是什么。 因此,上述数据包的预期输出将是(不修改原始流):
adghfjiyromn
我不仅关注逻辑,还关注要使用的确切流操作例程;考虑到读者每秒假设读取大约3-4个数据包。
它还有助于提供理由,说明为什么我们更喜欢特定的数据类型(byte [],char []或字符串)来解决这个问题。
答案 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));