以下方法会收到byte[] b
不确定的长度。它包含要打印到控制台样式窗口的字符串。我想将b
拆分为第一个换行符,以便该字符包含在第一个数组中。但是,此时会抛出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++;
}
答案 0 :(得分: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);
答案 1 :(得分:1)
我宁愿在字节中构建String
并使用String API。
但是,如果您确实需要执行字节操作,可以将stringBytes
和extraBytes
声明为List<Byte>
,例如您可以根据需要添加任意数量的值而不知道它们的大小。
答案 2 :(得分:0)
您可以使用ByteArrayOutputStream
作为轻量级可扩展字节数组:
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++;
}