ANTLRInputStream与ANTLRFileStream已废弃,替代方案是什么?
嘿,这个问题我之前也碰到过!在ANTLR 4.7及以后的版本里,ANTLRFileStream和ANTLRInputStream确实都被标记为废弃了,官方推出了更统一、高效的输入处理类来替代,具体方案如下:
替代 ANTLRFileStream
你可以直接使用CharStreams.fromFileName()或者CharStreams.fromPath()来读取文件,这两个方法是官方现在主推的方式:
// 直接传入文件名的写法 CharStream charStream = CharStreams.fromFileName("myfile.testlang"); // 或者使用Path对象(更符合Java NIO规范) Path filePath = Paths.get("myfile.testlang"); CharStream charStream = CharStreams.fromPath(filePath);
替代 ANTLRInputStream(基于FileInputStream的场景)
如果是从FileInputStream这类输入流读取内容,换成CharStreams.fromStream()就可以了,记得要正确处理IO异常:
try (FileInputStream fis = new FileInputStream("myfile.testlang")) { CharStream charStream = CharStreams.fromStream(fis); // 接下来就可以用这个charStream初始化你的Lexer和Parser了 } catch (IOException e) { // 这里添加自定义的异常处理逻辑 e.printStackTrace(); }
补充一句:CharStreams类整合了多种输入源的处理逻辑,不管是文件、字节流、字符串还是其他输入类型,都能通过它来生成CharStream对象,而且内部的字符处理效率也比旧的输入流类更高,完全可以替代你之前的写法。
内容的提问来源于stack exchange,提问作者Ameer Tamboli
相关产品推荐
相关产品推荐

