, поэтому я работаю над этим проектом, который анализирует шестнадцатеричные дампы для определенных подписи файлов. Проблема, с которой я сталкиваюсь, заключается в попытке проанализировать дампы размером 16+ ГБ, я получаю ошибку OutOfMemoryError: Java heap space. Поэтому я решил перепроектировать алгоритм, который я использую.Использование сканера для отображения всей строки, если строка содержит любую часть соответствия строки (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);
}
}
}
}
так это добавление весь файл в entireTextFile 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 является «ffd8 ffe0», единственная линия, которую я хотел бы чтобы добавить к моему JPGHeaders ArrayList является:
0012c00: ffd8 ffe0 0010 4a46 4946 0001 0201 0050 ......JFIF.....P
Я знаю, что это похоже на Grep в Linux, но я делаю это для Java проекта, в затмении на платформе Windows. Есть ли более простой способ поиска в каждой строке файла при его первоначальном сканировании и добавлении этих конкретных строк к соответствующему arraylist? или я застреваю весь файл в ArrayList, а затем просматриваю ArrayList для строковых литералов?
Это изящный. Ненавижу, как иногда самые очевидные решения забывают, когда вы некоторое время смотрите на проект. Спасибо. – Mattski357