大量数据的排序问题,新手请教 要对10亿个整数进行排序,整数是正整数、有可能是重复的。因为数据太多不可能一次性从文件中读入数据到内存进行排序,目前我只想到把数据写到数据库进行排序,没有想到其他的排序方法,请教各位有没有办法,我现在觉得无从下手。内存大数据排序 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://www.cnblogs.com/lqminn/archive/2012/08/30/2663281.html 写入数据库,查询排序select * from A order by num 在读文件的时候发现一个问题,java.io.EOFExceptionat java.io.DataInputStream.readInt(DataInputStream.java:375) at t1.SortFile.readFlie(SortFile.java:22) at t1.SortFile.main(SortFile.java:43),导致数据丢失 下面是代码 FileInputStream fr=new FileInputStream("D:/data.txt"); BufferedInputStream bufr=new BufferedInputStream(fr); DataInputStream dbuf=new DataInputStream(bufr); int i=0; while((i=dbuf.readInt())!=-1){ i=dbuf.readInt(); System.out.println(i);我不知道这是何种原因导致,读取的时候发生异常,求各位解答 笨猫参考#1的方法,如果lz能给jvm分配3G内存的,那么:byte[] bys = new byte[Integer.MAX_VALUE];初始时,每个byte的值是0,有一个值就加一个,如:10031101321003110031就是bys[10031]=3bys[10132]=1每个值重复次数每个不能超过Byte.MAX_VALUE。 我自己写了一段代码应该是可以实现的 但是出现了上面说的异常,异常是因为读文件时产生的byte[] arrRead=new byte[1000000]; int y; public void readFlie() { try{ FileInputStream fr=new FileInputStream("D:/data.txt"); BufferedInputStream bufr=new BufferedInputStream(fr); DataInputStream dbuf=new DataInputStream(bufr); int i=0; //把arrRead的每一个值初始化为0 for(int q=0;q<arrRead.length;q++) arrRead[q]=0; //从文件中读取数据出现一次对应的值+1 while((i=dbuf.readInt())!=-1){ i=dbuf.readInt(); if(arrRead[i]==0){ arrRead[i]=1; }else{ y= arrRead[i]++;} } dbuf.close(); } catch (IOException e) { e.printStackTrace(); } //输出数组对应到底下标,实现排序 for(int j=0;j<arrRead.length;j++) if(arrRead[j]==1){ System.out.println(j); }else{ for(int z=0;z<y;z++) System.out.println(j); } 就基本的知识来说,没有百度不到或者google不到的问题,只是你找问题的方式可能有问题。把你的异常贴出来看看吧。 问题我已经发现了,是因为代码写重复了 while((i=dbuf.readInt())!=-1){ i=dbuf.readInt(); 这里进行了两次读入。 java 安装 visualstudio的选择问题 会使用JFREECHAERT的来看看 help ,一个关于java与Access连接的问题 readline 的不能输出汉字 GUI牛人进来看看 不太难的问题,我有思路,但没做出来.50分啊~ JFreeChart程序改成Applet出现的诡异问题 求书:详细讲解java类的继承,接口机制 char[]发送问题 JavaWeb前的准备--Java基础增强 [java]win7安装jdk1.6没有自带数据库(derby) java swing 组件不显示的问题
java.io.EOFException
at java.io.DataInputStream.readInt(DataInputStream.java:375)
at t1.SortFile.readFlie(SortFile.java:22)
at t1.SortFile.main(SortFile.java:43),导致数据丢失 下面是代码 FileInputStream fr=new FileInputStream("D:/data.txt");
BufferedInputStream bufr=new BufferedInputStream(fr);
DataInputStream dbuf=new DataInputStream(bufr);
int i=0;
while((i=dbuf.readInt())!=-1){
i=dbuf.readInt();
System.out.println(i);我不知道这是何种原因导致,读取的时候发生异常,求各位解答
初始时,每个byte的值是0,有一个值就加一个,如:
10031
10132
10031
10031就是
bys[10031]=3
bys[10132]=1每个值重复次数每个不能超过Byte.MAX_VALUE。
int y;
public void readFlie() {
try{
FileInputStream fr=new FileInputStream("D:/data.txt");
BufferedInputStream bufr=new BufferedInputStream(fr);
DataInputStream dbuf=new DataInputStream(bufr);
int i=0;
//把arrRead的每一个值初始化为0
for(int q=0;q<arrRead.length;q++)
arrRead[q]=0;
//从文件中读取数据出现一次对应的值+1
while((i=dbuf.readInt())!=-1){
i=dbuf.readInt();
if(arrRead[i]==0){
arrRead[i]=1;
}else{
y= arrRead[i]++;}
}
dbuf.close();
} catch (IOException e) {
e.printStackTrace();
}
//输出数组对应到底下标,实现排序
for(int j=0;j<arrRead.length;j++)
if(arrRead[j]==1){
System.out.println(j);
}else{
for(int z=0;z<y;z++)
System.out.println(j);
}
就基本的知识来说,没有百度不到或者google不到的问题,只是你找问题的方式可能有问题。
把你的异常贴出来看看吧。
i=dbuf.readInt(); 这里进行了两次读入。