0

メッセージパケットをストリーム(ByteArrayInputStream)として受信するリーダーがあります。
各パケットには、英字と 2 進数で構成されるデータが含まれています。

adghfjiyromn1000101010100......

このストリームから文字をシーケンスとしてコピーする (削除しない) 最も効率的な方法は何ですか? したがって、上記のパケットの予想される出力は次のようになります (元のストリームを変更することなく):

adghfjiyromn

ロジックだけでなく、使用する正確なストリーム操作ルーチンにも関心があります。リーダーが毎秒約 3 ~ 4 パケットを読み取ると仮定すると、
また、これに取り組むために特定のデータ型 (byte[]、char[] または文字列) を好む理由を説明することも役立ちます。

4

3 に答える 3

0

私はそれが最善の方法だと思います:

1 - ByteArrayInputStream を文字列 (または StringBuffer) に変換します 2 - 0 または 1 の最初のインデックスを見つけます 3 - 部分文字列 ( 0 、 FIRST_INDEX ) を使用します

于 2013-08-17T06:04:06.963 に答える
0

あなた : 各パケットには、英字の後に 2 進数が続くデータが含まれています。私 : データは 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 に答える