所以,我得到了这些数据.从网络套接字,或从文件中.我正在拼凑将解释数据的代码.读取一些字节,检查一些标志,一些字节表示后面有多少数据.读入那么多数据,冲洗,重复.
这个任务让我想起解析源代码.我对lex/yacc和antlr很满意,但他们不能胜任这项任务.你不能将比特和原始字节指定为标记(好吧,也许你可以,但我不知道如何),你不能把它们哄成"读取两个字节,使它们成为无符号的16位整数,称之为n,然后读取n个字节."
然后,当以系统方式定义协议/数据格式的规范(并非所有规范都是)时,应该有一种系统的方式来读取根据协议格式化的数据.对?
必须有一个工具来做到这一点.
因此,每本Java教科书都讨论了Java的灵活性,因为它可以在运行时加载类.只需拼凑一个字符串并将其交给它Class.forName()
,然后抓住ClassNotFoundException
并处理它.这个理论太多了.
您能举例说明您是如何使用Java类加载来实现一个本来不可能或不容易的功能的吗?请注意,我不是问"有什么伟大的事情可以做什么?" - 我正在寻找真实世界的例子,无论是开源应用程序还是 - 如果你能够在不提供太多细节的情况下描述它 - 一个专有的应用程序.
编辑:当然,VM会根据需要懒惰地加载类.只要我确信我所需要的所有课程都在那里,这就是幕后的事情.我该怎么处理ClassNotFoundException
?假设我写了十页文本,并且PrinterDriver
找不到该课程.
所以,我今天通过检查配置文件杀死了构建.它知道服务器的位置(想想SQL服务器等),而且我一直在反对在我的盒子上运行的服务器.通常,或者更确切地说,在其他情况下,我们会针对中央服务器运行.当然,每日构建没有找到"我的"服务器,因此破损.然后,再次编辑配置文件以在签入之前指向"正常"服务器,并在签入之后再次编辑它.
我一直想让VC忽略配置文件,这样就不会意外地检查它.另一方面,存储库应包含一个干净,可用的文件版本.我不可能忽略它,同时检查它,现在,我可以吗?
所以,我正在寻找的是一种方法,有一个文件,错误,检查,但永远不会检入.至少在最常见的情况下 - 如果配置文件发生重大变化,一些特殊的程序,以获得进入存储库的新版本是可行的.
如果您以前遇到过这个问题,我会对您找到的任何解决方案感兴趣.只要它们不打破构建,那就是;)
所以,我正在使用jdbc与MySQL数据库通信.对于许多表和许多查询/视图,我创建了一个类,它封装了表的一行或查询/表结果.对DB的访问返回这样一个类的一个对象(当我确切地知道只有一个匹配的行时)或这些对象的Vector.
每个类都有一个工厂方法,该方法从ResultSet的一行构建一个对象.需要大量的ResultSet.getXXX()方法,以及关于哪个值在哪个列中的详细记账,特别是在更改表/查询/视图布局之后.
创建和维护这些对象是一项无聊,工作密集且令人头脑麻木的任务.换句话说,一种由工具完成的任务.它应该读取SQL(MySQL变体,唉)并生成Java代码.或者,至少,给我一个表/查询/视图的表示(XML?DOM?),允许我自己进行java代码生成.
你能说出这个工具吗?