从字节缓冲区中删除一些字节并返回相同的字节缓冲区

时间:2020-06-25 06:19:42

标签: java byte bytebuffer carriage-return

我有一个字节缓冲区,我需要从中删除一些回车符/r,并在删除后返回相同的字节缓冲区。在帮助下,我能够按照以下方式删除流中的/r,但返回了int[],有什么方法可以使我不需要创建另一个字节缓冲区并在删除后使用相同的字节缓冲区。 /r?下面是我使用的代码

IntStream.range(bb.position(), bb.limit())
          .filter(i -> bb.get(i) != 13)
          .map(i -> bb.get(i)) 
          .toArray();

让我知道其他方法吗?

1 个答案:

答案 0 :(得分:2)

您可以使用以下帮助方法:

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以解决丢失的元素。