1

以下のメソッドbyte[] bは不確定な長さを受け取ります。コンソール スタイルのウィンドウに出力される文字列が含まれます。bその文字が最初の配列に含まれるように、最初の改行文字で分割したいと思います。ただし、現時点では、とがサイズ 0 で宣言されているArrayOutOfBoundsErrorためstringBytes、がスローされます。extraBytesどうすればこの問題を回避できますか?

byte[] stringBytes = {};
byte[] extraBytes = {};
int i = 0;

while(i < b.length) {
    stringBytes[i] = b[i];
    if(b[i] == '\n' && i + 1 != b.length) {
        while(i < b.length) {
            extraBytes[i - stringBytes.length] = b[i++];
        }

        break;
    }

    i++;
}
4

3 に答える 3

2

これを試して:

byte[] stringBytes;
byte[] extraBytes;
int i = 0;

while(i < b.length) {
    if(b[i] == '\n' && i + 1 != b.length) {
        break;
    }

    i++;
}
stringBytes = java.util.Arrays.copyOf(b, i+1);
extraBytes = java.util.Arrays.copyOfRange(b, i+1, b.length - 1);
于 2013-03-29T16:41:50.270 に答える
1

私はむしろStringバイトから構築し、文字列 API を使用したいと考えています。

ただし、宣言できるバイト操作を本当に実行する必要がある場合は、サイズを知らなくてもstringBytes、必要な数の値を追加できますextraBytesList<Byte>

于 2013-03-29T16:36:05.620 に答える
0

ByteArrayOutputStreamaを軽量で拡張可能なバイト配列として使用できます。

  • バイトを追加するには、writeメソッドを使用します。
  • これまでに書き込んだバイトを取得するには、toByteArrayメソッドを使用します。

例えば:

ByteArrayOutputStream stringBytes = new ByteArrayOutputStream();
ByteArrayOutputStream extraBytes = new ByteArrayOutputStream();
int i = 0;

while(i < b.length) {
    stringBytes.write(b[i]);
    if(b[i] == '\n' && i + 1 != b.length) {
        i++;
        extraBytes.write(b, i, stringBytes.length - i);
        break;
    }
    i++;
}
于 2013-03-29T16:38:12.943 に答える