gpt4 book ai didi

java - 如果该行包含字符串匹配的任何部分,则使用扫描仪显示整行(Java)

转载 作者:行者123 更新时间:2023-12-01 12:14:48 25 4
gpt4 key购买 nike

所以我正在研究这个项目,该项目分析特定文件签名的十六进制转储。我遇到的问题是,当尝试分析大小为 16+ GB 的转储时,我收到 OutOfMemoryError: Java 堆空间错误。所以我的想法是重新设计我正在使用的算法。

现在我的代码看起来类似于:

public class Test
{
private static ArrayList<String> JPGHeaders = new ArrayList<String>();
private static ArrayList<String> JPGTrailers = new ArrayList<String>();
private static ArrayList<String> entireTextFile = new ArrayList<String>();

public static void main (String[] args)
{
Scanner scanner = new Scanner(new File("C:\\HexAnalyser\\HexDump\\fileTest.txt"));

while (scanner.hasNextLine())
{
entireTextFile.add(scanner.nextLine());
}

for (String line : entireTextFile)
{
if(line.contains(Constants.JPGHEADER))
{
JPGHeaders.add(line);
}

if(line.contains(Constants.JPGTRAILER))
{
JPGTrailers.add(line);
}
}

}
}

因此它将整个文件添加到 fullTextFile ArrayList 中,然后在该 ArrayList 中搜索特定的文件头和尾部。

对于那些不知道典型的十六进制转储是什么样子的人,它类似于:

0012be0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0012bf0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0012c00: ffd8 ffe0 0010 4a46 4946 0001 0201 0050 ......JFIF.....P
0012c10: 0050 0000 ffed 166e 5068 6f74 6f73 686f .P.....nPhotosho
0012c20: 7020 332e 3000 3842 494d 03ed 0000 0000 p 3.0.8BIM......
0012c30: 0010 0050 0000 0001 0001 0050 0000 0001 ...P.......P....
0012c40: 0001 3842 494d 040d 0000 0000 0004 0000 ..8BIM..........
0012c50: 002d 3842 494d 03f3 0000 0000 0008 0000 .-8BIM..........

由于 JPEG 的 header 是“ffd8 ffe0”,因此我想要添加到 JPGHeaders ArrayList 中的唯一行是:

0012c00: ffd8 ffe0 0010 4a46 4946 0001 0201 0050  ......JFIF.....P

我知道这与 Linux 中的 grep 类似,但我正在为 Windows 平台上的 eclipse 中完成的 java 项目执行此操作。有没有更简单的方法可以在最初扫描文件时搜索文件的每一行并将这些特定行添加到相应的数组列表中?或者我是否一直将整个文件扫描到 ArrayList 中,然后在所述 ArrayList 中搜索字符串文字?

最佳答案

public class Test
{
private static ArrayList<String> JPGHeaders = new ArrayList<String>();
private static ArrayList<String> JPGTrailers = new ArrayList<String>();
private static ArrayList<String> entireTextFile = new ArrayList<String>();

public static void main (String[] args)
{
Scanner scanner = new Scanner(new File("C:\\HexAnalyser\\HexDump\\fileTest.txt"));

while (scanner.hasNextLine())
{
String line = scanner.nextLine();
if(line.contains(Constants.JPGHEADER))
{
JPGHeaders.add(line);
}

if(line.contains(Constants.JPGTRAILER))
{
JPGTrailers.add(line);
}
}

}
}

为什么要记住整个事情?读完这句话后,立即分析它。如果不相关,则丢弃它。

关于java - 如果该行包含字符串匹配的任何部分,则使用扫描仪显示整行(Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27083124/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com