4

バイト配列を操作するための一般的なメソッドを含む無料のライブラリはありますか?

少なくともobバイト配列で次の操作を実行できるはずですが、他の配列タイプも便利です。

  • サブアレイを検索する
  • 検索して置換
  • 特定の位置に要素を挿入します
  • 特定の位置にあるサブアレイを削除します

これらの機能はすべて高度な魔法ではないことを私は知っていますが、それらを完全に実装し、対応する単体テストを含むばかとエラーの証明には時間がかかります。

したがって、これらの関数を含む(非GPL)ライブラリを探しています。誰かがそのような図書館を知っていますか?

4

3 に答える 3

3

プリミティブ型の配列を使用する場合は、Guavaライブラリが役立ちます。詳細については、PrimitivesExplained-guava-libraries-Guavaのプリミティブユーティリティを参照してください。-Guava:Java1.6以降のGoogleコアライブラリ-Googleプロジェクトホスティング

面白いクラスはcom.google.common.primitives.Bytes

于 2012-05-24T14:39:09.083 に答える
-1

最初の3つの問題は、 Java.util.Arraysクラスで解決できると思います。サードパーティのライブラリでは、解決する必要はありません。

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

最後の問題として、私が知っているサードパーティのutilパッケージをいくつか提案できます。

GoogleのGuava、ApacheのcommonsAPIが役立つ場合があります。

于 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 に答える