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

标签 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();
让我知道任何其他方式来做到这一点?

最佳答案

您可以使用此辅助方法:

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/

相关文章:

java - 即使关闭 AudioInputStream 也无法删除文件

java - 手动删除目标文件夹后无法构建 Maven 项目

java - 如何连接到我的网站数据库? java

iphone - NSData 字节浮点 - iPhone SDK

java - Javolution ByteBuffer 问题

java - 如何绑定(bind) Activity 中 NavigationView 中的 TextView

java - 如何使用java卡apdu从智能卡写入和读取数据

将 C 字节数组转换为 long long

java - java 进程正在泄漏堆内存

java - 将 java currentTimeMillis 转换为字节的 clojure vector