Kann der Java-Parser ANTLR4 sehr große Dateien verarbeiten oder Dateien streamen?

Kann der von ANTLR generierte Java-Parser beliebig große Dateien streamen?

Ich habe versucht, einen Lexer mit einem UnbufferedCharStream zu erstellen, und habe diesen an den Parser übergeben. Ich habe eine UnsupportedOperationException aufgrund eines Aufrufs von size für den UnbufferedCharStream erhalten, und die Ausnahme enthielt eine Erklärung, dass Sie size für einen UnbufferedCharStream nicht aufrufen können.

    new Lexer(new UnbufferedCharStream( new CharArrayReader("".toCharArray())));
    CommonTokenStream stream = new CommonTokenStream(lexer);
    Parser parser = new Parser(stream);

Ich habe im Grunde eine Datei, die ich mit pig aus hadoop exportiert habe. Es hat eine große Anzahl von Zeilen, die durch '\ n' getrennt sind. Jede Spalte wird durch ein '\ t' getrennt. Dies ist einfach in Java zu analysieren, da ich einen gepufferten Reader verwende, um jede Zeile zu lesen. Dann habe ich durch '\ t' geteilt, um jede Spalte zu erhalten. Ich möchte aber auch eine Art Schema-Validierung haben. Die erste Spalte sollte ein korrekt formatiertes Datum sein, gefolgt von einigen Preisspalten, gefolgt von einigen Hex-Spalten.

Wenn ich mir den generierten Parser-Code ansehe, könnte ich ihn so nennen

    parser.lines().line()

Dies würde mir eine Liste geben, über die ich konzeptionell iterieren könnte. Aber es scheint, dass die Liste eine feste Größe haben würde, wenn ich sie bekomme. Das heißt, der Parser hat wahrscheinlich bereits die gesamte Datei analysiert.

Gibt es einen anderen Teil der API, mit dem Sie wirklich große Dateien streamen können? Wie benutzt man den Visitor oder Listener, um beim Lesen der Datei angerufen zu werden? Es kann jedoch nicht die gesamte Datei im Speicher behalten. Es wird nicht passen.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage