我有一个字节缓冲区,我需要从中删除一些字节的回车 /r
并在删除后返回相同的字节缓冲区。在帮助下,我能够移除 /r
使用如下流但返回 int[]
, 有什么方法可以让我不需要创建另一个字节缓冲区并在删除 /r
后使用相同的缓冲区?下面是我使用的代码
IntStream.range(bb.position(), bb.limit())
.filter(i -> bb.get(i) != 13)
.map(i -> bb.get(i))
.toArray();
让我知道任何其他方式来做到这一点?
最佳答案
您可以使用此辅助方法:
public static int removeAll(ByteBuffer buf, int b) {
int removed = 0;
for (int i = 0, start = 0, cap = buf.capacity(); i < cap; i++) {
byte read = buf.get(i);
buf.put(i, (byte) 0);
if (read != b) {
buf.put(start++, read);
} else {
removed++;
}
}
return removed;
}
然后你可以这样调用:removeAll(buf, '\r');
它只是简单地迭代缓冲区,并删除与提供的参数相等的字节,留下 0
在缓冲区的末尾以考虑丢失的元素。
关于java - 从字节缓冲区中删除一些字节并返回相同的字节缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62569028/