字节数组操作的Java库?[非公开]

问题描述 投票:4回答:3

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

它至少应该能够执行以下操作,但其他类型的数组也不错。

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

我知道所有这些函数都不是什么高深的魔法,但是完全实现它们并防止傻瓜& 错误,包括相应的单元测试需要一些时间。

因此,我正在寻找一个包含这些函数的(非GPL)库,有人知道这样的库吗?

java bytearray
3个回答

-1
投票

我认为你的前三个问题可以通过以下方式解决。Java.util.Arrays 类,你不需要使用第三方库。

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

对于最后一个问题,我可以推荐一些我知道的第三方工具包。

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


-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 行不通,但你可以很容易地概括:)

© www.soinside.com 2019 - 2024. All rights reserved.