我现在想把100万数据分成4个25万的数据。数据的内容是一些数字,以string的形式保存在txt文件中,每个数字后面都跟一个空格,形如“1 2 3 4 5...”。
我在网上查到的都是以字节为单位读取,怎么才能以一个单独的数字为单位,每次读取25万个。还有文件这么大,怎么读入内存?
求指教
我现在想把100万数据分成4个25万的数据。数据的内容是一些数字,以string的形式保存在txt文件中,每个数字后面都跟一个空格,形如“1 2 3 4 5...”。
我在网上查到的都是以字节为单位读取,怎么才能以一个单独的数字为单位,每次读取25万个。还有文件这么大,怎么读入内存?
求指教
public static void main(String[] args) throws Exception {
int max=5; //每次读的长度,因为我的文件比较小,测试的长度也小
FileReader file=new FileReader("E:\\a.txt");
BufferedReader bufferedReader=new BufferedReader(file);
char[] arr=new char[6];//缓冲区设置比较小
int len=arr.length;
len=bufferedReader.read(arr, 0, len);
StringBuffer stringBuffer=new StringBuffer();
stringBuffer.append(new String(arr));
while (len!=-1) {
len=bufferedReader.read(arr, 0, len);
if(len!=-1){
stringBuffer.append(new String(arr).substring(0,len));//最后会有没覆盖的数据
if(stringBuffer.toString().split(" ").length>max){
bufferedReader.mark(max); //标记下次读取的位置
//readAheadLimit - 在仍保留该标记的情况下,对可读取字符数量的限制。在读取达到或超过此限制的字符后,尝试重置流可能会失败。限制值大于输入缓冲区的大小将导致分配一个新缓冲区,其大小不小于该限制值。因此应该小心使用较大的值。
//api上是这么解释的,但是我设置很小的时候下面还是读完了
break;
}
}
}
bufferedReader.reset();
System.out.println(stringBuffer.toString());
//第二次读时候会接着上次读到的位置读
len=arr.length;
len=bufferedReader.read(arr, 0, len);
stringBuffer=new StringBuffer();
stringBuffer.append(new String(arr));
while (len!=-1) {
len=bufferedReader.read(arr, 0, len);
if(len!=-1){
stringBuffer.append(new String(arr).substring(0,len));//最后会有没覆盖的数据
}
}
System.out.println(stringBuffer.toString());
bufferedReader.close();
file.close();
}
我也是刚学的,希望对你有帮助,如果有不对的地方,望指出,共同学习
15 回答8.2k 阅读
8 回答6k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.2k 阅读
2 回答3.9k 阅读
1 回答2.2k 阅读✓ 已解决
我瞎说一下啊。
用char 和正则 提取每一个数字呢? 把String转换为char数组
文件大的话= - =这个就不知道了