4

是否有可用的免费库包含操作字节数组的常用方法?

它至少应该能够执行以下操作 ob 字节数组,但其他数组类型也会很好:

  • 搜索子数组
  • 搜索和替换
  • 在特定位置插入元素
  • 删除某个位置的子数组

我知道所有这些功能都不是很神奇,但是完全实现它们并且包括相应的单元测试在内的傻瓜和错误证明需要一些时间。

因此,我正在寻找包含这些功能的(非 GPL)库。有人知道这样的图书馆吗?

4

3 回答 3

3

如果您使用原始类型的数组,Guava 库可以提供帮助。在PrimitivesExplained - guava-libraries - Guava 的原语实用程序中查看更多信息,解释。- Guava:适用于 Java 1.6+ 的 Google 核心库 - Google 项目托管

有趣的课程是com.google.common.primitives.Bytes

于 2012-05-24T14:39:09.083 回答
-1

我认为你的前三个问题可以通过Java.util.Arrays类来解决,你不需要 3rd 方库。

Arrays.binarySearch() method is for your first problem.
Arrays.fill() method for your second problem.

对于最后一个问题,我可以建议一些我知道的 3rd 方实用程序包。

Google 的 Guava,Apache 的 commons API 可能会有所帮助。

于 2012-05-24T14:30:54.940 回答
-1

我想您可以通过将数组转换为Collection. 如果你不想使用Collections,而你只处理byte[],你可以这样做:

public class A {

    public static byte[] deleteSubarray(byte[] array, byte[] subArray) {
        int p = searchFor(array, subArray);
        if (p == -1)
            return array;
        byte[] result = new byte[array.length - subArray.length + 1];
        for (int i = 0; i < p; i++)
            result[i] = array[i];
        for (int i = p + subArray.length - 1; i < array.length; i++) {
            result[p] = array[i];
            p++;
        }
        return result;
    }

    public static byte[] insertElementAt(byte[] array, byte element, int position) {
        byte[] result = new byte[array.length + 1];
        for (int i = 0; i <= position - 1; i++)
            result[i] = array[i];
        result[position] = element;
        for (int i = position + 1; i < array.length; i++) {
            result[i] = array[i];
        }
        return result;
    }

    public static byte[] searchAndReplace(byte[] array, byte[] search, byte[] replace) {
        if (search.length != replace.length)
            return array;
        int p = searchFor(array, search);
        if (p == -1)
            return array;
        byte[] result = Arrays.copyOf(array, array.length);
        for (int i = 0; i < replace.length; i++) {
            result[p] = replace[i];
            p++;
        }
        return result;
    }

    public static int searchFor(byte[] array, byte[] subArray) {
        if (subArray.length > array.length)
            return -1;
        int p = (new String(array)).indexOf(new String(subArray));
        for (int i = 1; i < subArray.length; i++) {
            if (array[p + i] != subArray[i])
                return -1;
        }
        return p;
    }

    public static void main(String[] args) {
        String a = "hello world!";
        String b = "lo w";
        System.out.println(searchFor(a.getBytes(), b.getBytes()));
        System.out.println(new String(searchAndReplace(a.getBytes(), b.getBytes(), "mn x".getBytes())));
        System.out.println(new String(insertElementAt(a.getBytes(), "-".getBytes()[0], 5)));
        System.out.println(new String(deleteSubarray(a.getBytes(), b.getBytes())));
    }

}

输出:

3
helmn xorld!
hello-world!
helworld!

如果您还要处理其他类型的数组,那么searchFor它不起作用,但您可以轻松概括:)

于 2012-05-24T14:33:59.150 回答