我现在想把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();
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。