- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在参与一个与解析文本文件(应用 ETL 方法)相关的小型开发项目。我已经创建了一个在本地计算机上正确运行的演示代码,但是当我将其部署到 Apache Tomcat 容器时,它会生成许多与内存溢出、类型转换等相关的错误。
这是普遍事实:
这是file structure (注释指定每个单元格的数据类型和其他相关信息)。
请注意,RegisterType1 每个客户仅重复一次,RegisterType2 可以重复一次或多次,RegisterType3 和 RegisterType4> 重复一次。
另请注意,每种寄存器类型的长度各不相同,即:RegisterType1 12 个字段、RegisterType2 10 个字段等。
正如我之前所说,我当前的解析器的编码非常糟糕,以至于会产生很多错误。 This is the actual code和 this one (创建数据库连接并执行查询的类)。
这是一个example text file谁需要解析。
当前开发环境平台:Java 6容器:Tomcat 7VPS 配置文件:RAM 1.7GB,存储空间:20GB,处理器:(Intel(R) Xeon(R) CPU X5650 @ 2.67GHz,24 核)。
实际问题:
我想创建一个高效、正确且高性能的解析器。
我需要对此主题的一些建议。创建一个好的解析器的最佳方法是什么?
预先感谢您提供的信息。
问候,
最佳答案
在这里发布您的相关代码。好的,我会为您做一些:
BufferedReader reader = null;
ArrayList< String> elements = new ArrayList< String>();
try {
reader = new BufferedReader(new FileReader(archivoFuenteDatos));
String text = null;
// repeat until all lines is read
while ((text = reader.readLine()) != null) {
...
elements.add(...);
...
} catch(...) ...
saveOnDB(elements);
永远不要读取这样的大文件。如果这样做,您必须同时将所有数据保存在内存中。
尝试将每个条目直接写入数据库,而不是先复制到数组列表。这有望解决 OOM。
分析您的代码。如果速度足够快,就完成了。
如果不够快,则创建一个 ArrayList。给它一个初始容量n
。在写入数据库之前,在该列表中读取不超过 n
个项目。
编辑:如果我没有错过重要的事情的话,你把自己的代码复制了四次。请在发布之前重构(代码太多)。例如,巨大的开关可以重构为如下所示:
while ((text = reader.readLine()) != null) {
String[] campos = text.replaceAll(" +", " ").split(";");
int n;
switch (text.charAt(0)) {
case '1':
case '2':
case '3':
n = campos.length - 1;
break;
case '4':
// what does this mean? It will always give 5!
// n = contarPuntoComas(text) == 6 ? 5 : 5;
n = 5;
break;
default:
n= 0;
}
for (int i = 0; i < n; ++i) {
elements.add(campos[ i].trim());
} // end for
}
关于java - 解析文本文件: Efficiency and perfomance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15395517/
是否知道两种变体中哪一种工作得更快,或者它们相同,或者比较不正确。 Vector test(Vector &vec) { // return modified vector, or write di
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
我正在用 javascript 制作贪吃蛇游戏,并在 window.onload 函数内创建对象和游戏循环。 window.onload = function() { ... Code ... };
出于教育目的,我正在尝试实现我的容器 Vector。 在实现它的方法储备时,我遇到了一个问题: 这是从内存中的一个位置(初始容量)重新定位元素数组的最佳方法分配给新容量的内存? 我考虑了 2 种可能性
我正在编写一个应该能够同时解析多个页面的网络爬虫。我使用 Nokogiri 进行解析,这非常好,可以解决我所有的任务,但我不知道如何获得更好的性能。 我使用线程同时发出许多 open-uri 请求,这
我正在使用 OpenGL 制作一款类似 Minecraft 的游戏,我想知道在不损失性能的情况下进行灵活渲染的最佳解决方案是什么。我的意思是不同类型的方 block 有不同的绘制方式:通常的方 blo
我有两个表,其中包含用户的日常事件。我有两个加入这些表并从此表中选择前十个 ID。 表 1:构建日志 +----------------+------------------------+------
我的 Dom 结构如下所示: 在我的 html 网页上有 226 个 div,其对应的 ID 从“content-box1”到“content_box226”。这些内容框中的每一个都包含一个 svg
我在 fragment 中有以下 AsyncTask (为了清楚地显示错误而简化了示例): private class LoginTask extends AsyncTask { @Overr
PVS Studio 6.17(Windows 7、64 位、VS2017、C++-03)似乎在遵循简化代码时发出错误警告 #include #include #include bool fre
事实上,我不需要激活此选项卡(我的意思是我最喜欢的选项卡是 sqlalchemy、渲染和请求变量),但现在我想优化我的 View ,所以我需要启用此选项卡。奇怪的是它只适用于 Python 3(在两台
所以我正在用 Go 编写一个程序,由于 CGo,我使用 C 绑定(bind),并且我正在使用 ldap 来执行搜索、添加和修改操作。我可以设法做到所有这些,但现在我试图在 unicodePwd mod
我是一名优秀的程序员,十分优秀!