我一直在寻找最快的方法来读取和写入具有有限内存(约64MB)的java中的大文件(0.5 - 1 GB).文件中的每一行代表一条记录,所以我需要逐行获取它们.该文件是普通文本文件.
我尝试过BufferedReader和BufferedWriter但它似乎不是最好的选择.读取和写入大小为0.5 GB的文件大约需要35秒,只读取没有处理的写入.我认为这里的瓶颈是写作,因为单独阅读大约需要10秒钟.
我试图读取字节数组,但是在每个读取的数组中搜索行需要更多时间.
有什么建议吗?谢谢
在java中,当我使用String作为Hashmap的键时,我得到的结果与我在HashMap中使用字符串hashcode作为键时的结果略有不同.
任何见解?
我想知道jbpm、kie server 和kie workbench 有什么区别。我现在正在研究 jbpm 教程,所以我下载了完整的安装程序。但是,我读到: 1. jbpm 可以作为不同的 jars 分发。2. kie 服务器是作为战争分发的。
那么它们之间是什么关系呢?他们整合在一起了吗?它们是一样的吗?
这一切是如何与 Jboss EAP 集成/相关的?
我希望boost::unordered_map在没有下载整个Boost包的情况下包含在我的项目中.我怎样才能做到这一点?
我使用java从文件中读取数据,将数据复制到较小的数组并将这些数组放在Hashtables中.我注意到Hashmap比原始文件消耗更多内存(大约两倍)!知道为什么吗?
这是我的代码:
public static void main(final String[] args) throws IOException {
final PrintWriter writer = new PrintWriter(new FileWriter("test.txt",
true));
for(int i = 0; i < 1000000; i++)
writer.println("This is just a dummy text!");
writer.close();
final BufferedReader reader = new BufferedReader(new FileReader(
"test.txt"));
final HashMap<Integer, String> testMap = new HashMap<Integer, String>();
String line = reader.readLine();
int k = 0;
while(line != null) {
testMap.put(k, line);
k++;
line = reader.readLine();
}
}
Run Code Online (Sandbox Code Playgroud) 在java中,有FileChannel,我可以从文件通道读取.我也可以在我想要开始阅读的频道中设置位置.
C++/C中的任何类似函数?
我想知道如何确定java分配的内存.我有一个内存要求有限的程序.当我分配一个具有一定大小的数组时,我注意到JVM分配内存的倍数是这个大小的两倍:
例如:在我分配数组之前:
runtime.totalMemory() 15 MB
runtime.freeMemory(): 14 MB
Run Code Online (Sandbox Code Playgroud)
在这一行之后:char [] xxx = new char [4*1024*1024];
runtime.totalMemory() 15 MB
runtime.freeMemory(): 6 MB
Run Code Online (Sandbox Code Playgroud)
因此,可用内存量从14 MB下降到6 MB.即使我的阵列只有4 MB.我尝试过不同的数组,它总是一样的.为什么java分配数组大小的两倍?
谢谢
java ×4
c++ ×2
hashtable ×2
boost ×1
c ×1
file-io ×1
filechannel ×1
hashmap ×1
io ×1
jboss-eap-6 ×1
jbpm ×1
kie ×1
kie-server ×1
memory-leaks ×1
performance ×1