如何从Java中的两个字节数组之间的字节数组中选择字节

时间:2017-02-08 20:01:28

标签: java arrays byte

如何选择/剪切字节数组,allBytes表示Files.readAllBytes( file.toPath() )返回的文件中的字节。

    byte[] allBytes = new byte[] {50, 60, 70, 10, 20, 30, 40, -50, -40, 10}; 
    byte[] cutStart = new byte[]{60, 70}
    byte[] cutEnd = new byte[]{-50}
    // do something that will return
    byte[] finalBytes = {60, 70, 10, 20, 30, 40, -50};

所以基本上我将为方法cutStartcutEnd提供两个字节数组,它应该返回所有匹配之间的所有内容。所以allBytes中应该有多个匹配,所以它应该返回一个字节矩阵。

方法细节

如果在十六进制编辑器中打开任何二进制文件,您可以看到如下内容: enter image description here 你可以看到右边有很多人物。一些文件(不是这个)包含我希望列出的windows dll库的路径:

byte[] fileBytes = Files.readAllBytes( new File("path-to-file").toPath() );
byte[] start = "C:/Windows/".getBytes(); //System.getEnv() later...
byte[] end = ".dll".getBytes();

因此,最终输出应列出二进制文件中找到的所有路径链接:

"C:/windows/.....dxd9.dll"
"C:/windows/.....msvcp120.dll"

修改 根据答案的想法:

byte[] fileBytes = Files.readAllBytes( file.toPath() );
   String bytesString = new String(fileBytes);

  int startIndex = bytesString.indexOf("C:/windows/");
  int endIndex = bytesString.lastIndexOf(".dll");

  byte[] cut = Arrays.copyOfRange( fileBytes, startIndex, endIndex );
  String c = new String(cut);

返回非常长的字符串,从第一个匹配的路径开始,以最后一个结束。

String str = "Xabcd...Y...1234.....XefghY";

X是我想要的路径的起点,Y结束。如何从String str

获取String数组
 String[] results = new String[] { "Xabcd...Y", "XefghY" }

0 个答案:

没有答案