All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sta.mutils.ByteArrayUtils Maven / Gradle / Ivy


package com.sta.mutils;

/**
 * 

Name: ByteArrayUtils

*

Description: . *

*

Comment: ... *

*

Copyright: Copyright (c) 2019, 2020

*

Company: >StA-Soft<

* @author StA * @version 1.0 */ public final class ByteArrayUtils { /** * Pr?fen, ob in einem Byte-Array ab einer bestimmten Position der Inhalt eines anderen Bytes-Arrays enthalten ist. * @param buf das erste Byte-Array * @param offs Index in erstes Byte-Array * @param mask das zweite Byte-Array * @return true: ja/gleich, false: nein/ungleich */ public static boolean equals(byte[] buf, int offs, byte[] mask) { if (offs + mask.length > buf.length) { return false; } for (int i = 0; i < mask.length; i++) { if (buf[offs + i] != mask[i]) { return false; } } return true; } /** * Suche nach dem Vorkommen des Inhalts eines Byte-Arrays in einem anderen Byte-Array. * @param buf zu durchsuchendes Byte-Array * @param offs Start-Offset (Beginn der Suche an diesem Index) * @param mask Byte-Array mit Suchmuster * @return Index in Byte-Array, falls vorhanden, sonst -1 */ public static int find(byte[] buf, int offs, byte[] mask) { // wichtig ist hier das "<=" im for-Konstrukt!!! for (int i = offs; i <= buf.length - mask.length; i++) { if (equals(buf, i, mask)) { return i; } } return -1; } /** * Suche nach dem Vorkommen des Inhalts eines Byte-Arrays in einem anderen Byte-Array. * @param buf zu durchsuchendes Byte-Array * @param mask Byte-Array mit Suchmuster * @return Index in Byte-Array, falls vorhanden, sonst -1 */ public static int find(byte[] buf, byte[] mask) { return find(buf, 0, mask); } /** * Suchen und ggf. Ersetzung aller Vorkommen eines Byte-Arrays in einem zu durchsuchenden Byte-Array (ab Array-Anfang). * Hinweis: Dadurch werden auch Vorkommen des Musters gefunden, die durch eine Ersetzung vor oder innerhalb der * Ersetzungsstelle entstehen, gefunden. * @param buf zu durchsuchendes Byte-Array * @param mask Byte-Array mit Suchmuster * @param repl Byte-Array mit Ersetzung * @return Ergebnis-Byte-Array nach Ersetzung (falls etwas gefunden wurde, sonst = urspr?ngliches Byte-Array) */ public static byte[] replace(byte[] buf, byte[] mask, byte[] repl) { int i; int offs = 0; while ((i = find(buf, offs, mask)) >= 0) { byte[] ba1 = new byte[buf.length - mask.length + repl.length]; System.arraycopy(buf, 0, ba1, 0, i); System.arraycopy(repl, 0, ba1, i, repl.length); System.arraycopy(buf, i + mask.length, ba1, i + repl.length, buf.length - (i + mask.length)); buf = ba1; } return buf; } /** * Suchen und ggf. Ersetzung aller Vorkommen eines Byte-Arrays in einem zu durchsuchenden Byte-Array nach der letzten * Ersetzungs-Anfangsstelle. * Hinweis: Dadurch werden Vorkommen des Musters, die vor der letzten Ersetzungsstelle durch das Ersetzen entstehen, nicht * gefunden. Daf?r l?uft die Suche und Ersetzung in replace2(...) schneller als in replace(...). * @param buf zu durchsuchendes Byte-Array * @param mask Byte-Array mit Suchmuster * @param repl Byte-Array mit Ersetzung * @return Ergebnis-Byte-Array nach Ersetzung (falls etwas gefunden wurde, sonst = urspr?ngliches Byte-Array) */ public static byte[] replace2(byte[] buf, byte[] mask, byte[] repl) { int i; int offs = 0; while ((i = find(buf, offs, mask)) >= 0) { byte[] ba1 = new byte[buf.length - mask.length + repl.length]; System.arraycopy(buf, 0, ba1, 0, i); System.arraycopy(repl, 0, ba1, i, repl.length); System.arraycopy(buf, i + mask.length, ba1, i + repl.length, buf.length - (i + mask.length)); buf = ba1; offs = i + 1; } return buf; } /** * Suchen und ggf. Ersetzung aller Vorkommen eines Byte-Arrays in einem zu durchsuchenden Byte-Array nach der letzten * Ersetzungs-Endstelle. * Hinweis: Dadurch werden Vorkommen des Musters, die vor der letzten Ersetzungsstelle durch das Ersetzen entstehen, nicht * gefunden. Ebenso werden Vorkommen des Musters, die innerhalb der Ersetzungsstelle durch das Ersetzen entstehen, nicht gefunden. * Daf?r l?uft die Suche und Ersetzung in replace3(...) nochmals schneller als in replace(...) und replace2(...). * @param buf zu durchsuchendes Byte-Array * @param mask Byte-Array mit Suchmuster * @param repl Byte-Array mit Ersetzung * @return Ergebnis-Byte-Array nach Ersetzung (falls etwas gefunden wurde, sonst = urspr?ngliches Byte-Array) */ public static byte[] replace3(byte[] buf, byte[] mask, byte[] repl) { int i; int offs = 0; while ((i = find(buf, offs, mask)) >= 0) { byte[] ba1 = new byte[buf.length - mask.length + repl.length]; System.arraycopy(buf, 0, ba1, 0, i); System.arraycopy(repl, 0, ba1, i, repl.length); System.arraycopy(buf, i + mask.length, ba1, i + repl.length, buf.length - (i + mask.length)); buf = ba1; offs = i + repl.length; } return buf; } //=========================================================================== /** * Dummy-Constructor. */ private ByteArrayUtils() { } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy