private byte[] splitKeyAlgorithm(byte[] key) {
var splitStream = 55;
for (int i = 0, x = 0; i < key.length; i++, x++) {
if (x == splitStream) {
key[i] = '\n';
x = -1;
}
}
return key;
}
我想通过新行字节'\ n'(splitStream)将字节数组拆分为相同长度的行。我的问题是:我在屏幕上有一个优雅的分割字节数组,但是 key [i] 表示的元素怎么办?被'\ n'覆盖吗?这是不可能的,因为我这样做:
Arrays.compare(original byte[], splitted byte[]);
Arrays.mismatch(original byte[], splitted byte[]);
以上代码返回这两个数组相等且没有任何不匹配。
编辑:// 比较如下:
Arrays.compare(List<ByteArrayOutputStream>outputStream.get(0).toByteArray(), primitive byte[] array);
答案 0 :(得分:1)
是的,您现在正在破坏阵列。
相反,您应该为插入的字符创建一个具有足够额外字节的新数组:
int splitStream=55;
byte[] copy=new byte[key.length+key.length/splitStream];
int kidx=0,ccount=0;
for(int i=0;i<copy.length;i++){
if(ccount==splitStream){
ccount=0;
copy[i]='\n';
} else {
ccount++;
copy[i]=key[kidx];
kidx++;
}
}
return copy;
...可能,但我尚未对其进行测试。
现在我做到了。修复了count
-ccount
的错字,这里有一个测试:https://ideone.com/efDvE2
答案 1 :(得分:0)
您没有将'\ n'插入到数组中,而是覆盖了key [i]上的所有内容。
可能是Arrays.compare返回0(等于),因为这些位置上已经有\ n了?
答案 2 :(得分:0)
您正在覆盖同一数组。因此original == splitted
。
private byte[] splitKeyAlgorithm(byte[] key) {
var lineLength = 55;
int copyLength = key.length + key.length / lineLength;
byte[] copy = new byte[copyLength];
int ci = 0;
for (int i = 0; i < key.length; i += lineLength) {
int i2 = Math.min(i + lineLength, key.length);
System.arraycopy(key, i, copy, ci, i2 - i);
ci += i2 - i;
if (ci < copy.length) {
copy[ci++] = '\n';
}
}
return copy;
}
答案 3 :(得分:0)
已解决。拆分前的原始数组被覆盖,原始数组和新数组上的元素byte [55] = 10,所以这是我的'\ n'。混淆是通过比较拆分后执行的操作,并且两个对象相同。对我来说很好的教训。感谢您提供所有答案。