1

下面的方法接收byte[] b不确定长度。它包含要打印到控制台样式窗口的字符串。我想b在第一个换行符处拆分,以便该字符包含在第一个数组中。然而,目前这会抛出一个ArrayOutOfBoundsError, 因为stringBytesextraBytes被声明为零大小。我怎样才能解决这个问题?

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

您可以使用 aByteArrayOutputStream作为轻量级可扩展字节数组:

  • 要添加一个字节,请使用该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 回答