扫码关注官方订阅号
我现在想把100万数据分成4个25万的数据。数据的内容是一些数字,以string的形式保存在txt文件中,每个数字后面都跟一个空格,形如“1 2 3 4 5...”。
我在网上查到的都是以字节为单位读取,怎么才能以一个单独的数字为单位,每次读取25万个。还有文件这么大,怎么读入内存?
求指教
业精于勤,荒于嬉;行成于思,毁于随。
我瞎说一下啊。用char 和正则 提取每一个数字呢? 把String转换为char数组文件大的话= - =这个就不知道了
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(); }
我也是刚学的,希望对你有帮助,如果有不对的地方,望指出,共同学习
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
我瞎说一下啊。
用char 和正则 提取每一个数字呢? 把String转换为char数组
文件大的话= - =这个就不知道了
我也是刚学的,希望对你有帮助,如果有不对的地方,望指出,共同学习