java bufferedrandomaccessfile_java 读写操作大文件 BufferedReader和RandomAccessFile
一
老问这问题,两个都答出来算加分项?
二
具体代码如下,没什么好说的直接说对比。
BufferedReader和RandomAccessFile的区别
RandomAccessFile 在数据越大,性能越差。因为他是数据文件的一个channel,支持读改原数据文件。
BufferedReader是读改数据文件的一个在内存的副本。
那RandomAccessFile的优点?
1.RandomAccessFile忽略了字符编码的处理,加快了处理速度
2.若是对数据操作在BufferedReader创立buffer的时候就做完了,RandomAccessFile自然就快了。
ps.
小文件RandomAccessFile,大文件BufferedReader
按行生成文件和按大小生成文件都实现了
BufferedReader提供处理字符编码的方式,使用InputStreamReader或者DataInputStream之类的。
private static void fileRead() throwsIOException {long time =System.currentTimeMillis();int bufSize = 10 * 1024 * 1024;byte[] bs = new byte[bufSize];
ByteBuffer byteBuf=ByteBuffer.allocate(bufSize);
FileChannel channel= new RandomAccessFile(input_path, "r").getChannel();
FileWriter fw= null;for (int i = 0; channel.read(byteBuf) != -1; i++) {
byteBuf.rewind();int size =byteBuf.limit();
byteBuf.get(bs);
fw= newFileWriter(String.format(output_path_format1, i));
String line= new String(bs, 0, size);
fw.append(line+ System.getProperty("line.separator"));
fw.flush();
byteBuf.clear();
}
fw.close();
time= System.currentTimeMillis() -time;
System.out.println("file read time = " +time);
}private static void bufferRead() throwsIOException {long time =System.currentTimeMillis();
BufferedInputStream bis= new BufferedInputStream(new FileInputStream(newFile(input_path)));int bufferSize = 10 * 1024 * 1024;
BufferedReader in= new BufferedReader(new InputStreamReader(bis, "utf-8"), bufferSize);
FileWriter fw= new FileWriter(String.format(output_path_format2, 0));for (int i = 0; in.ready(); i++) {if (i % 100 == 0) {
fw= new FileWriter(String.format(output_path_format2, i / 100));
}
String line=in.readLine();
fw.append(line+ System.getProperty("line.separator"));if (i % 100 == 0) {
fw.flush();
}
}
in.close();
fw.close();
time= System.currentTimeMillis() -time;
System.out.println("buffer read time = " +time);
}
这是生成大文件的代码,修改for循环次数控制文件大小,下面生成的文件大小是2G左右
private static String input_path = System.getProperty("user.dir") + File.separator + "data" + File.separator + "bigdata.txt";private static String output_path_format1 = System.getProperty("user.dir") + File.separator + "data" + File.separator + "part_1_%s.txt";private static String output_path_format2 = System.getProperty("user.dir") + File.separator + "data" + File.separator + "part_2_%s.txt";private static int bufSize = 10 * 1024 * 1024;private static void makeBigData() throwsIOException {
FileWriter fw= newFileWriter(input_path);
String line= "start ";for (int i = 0; i < 20000; i++) {
line+=i;
fw.append(line+ System.getProperty("line.separator"));
}
fw.flush();
fw.close();
System.out.println("end");
}
三
因为是自己琢磨的,总感觉写的有点丑,特别是生成大文件那里,希望各位指正一番。
源码地址 https://github.com/247292980/spring-boot 。fork的比star还多什么道理啊。
原文:https://www.cnblogs.com/ydymz/p/10141343.html
java bufferedrandomaccessfile_java 读写操作大文件 BufferedReader和RandomAccessFile相关推荐
- java如何读写操作yaml文件展示
文章目录 前言 java 读取 yaml java 写入 yaml 前言 yaml 本身是一个标记语言,其文件形式是.yml,常用来作数据配置的文件 下面使用的 Yaml 来源于org.yaml.sn ...
- Java实现FTP批量大文件上传下载
用Java实现FTP批量大文件上传下载 <iframe id="I0_1416224567509" style="margin: 0px; padding: 0px ...
- java实现把一个大文件切割成N个固定大小的文件
这个好像是我一年前去面试时的一道面试题,分享一下!考 java I/O 的! //java实现把一个大文件切割成N个固定大小的文件 package com.johnny.test; import ja ...
- JAVA实现服务器间拷贝文件,寻找在Java服务器之间传输大文件的好方法
在这个项目中有一个主要的数据库服务器,其他安装在不同地方的服务器维护着自己的本地数据库.我们必须允许每个系统将其本地数据库更新为主要数据库上的任何版本.所有的服务器都运行Java环境.寻找在Java服 ...
- JAVA 实现多线程下载大文件
JAVA 实现多线程下载大文件 开发中遇到一个问题,下载大文件到本地,导致等待时间过长,然后就寻找一个可以多线程下载的办法,受下载软件启发,想到多线程下载, 原理,首先查到这个文件的大小,然后根据线程 ...
- php利用文件做数据储存,PHP_PHP文件读写操作之文件写入代码,在PHP网站开发中,存储数据通 - phpStudy...
PHP文件读写操作之文件写入代码 在PHP网站开发中,存储数据通常有两种方式,一种以文本文件方式存储,比如txt文件,一种是以数据库方式存储,比如Mysql,相对于数据库存储,文件存储并没有什么优势, ...
- java 按行读取大文件文件内容_Java实现按行读取大文件
Java实现按行读取大文件 String file = "F:" + File.separator + "a.txt"; FileInputStream fis ...
- nio java 内核拷贝_大文件拷贝,试试NIO的内存映射
最近项目里有个需求需要实现文件拷贝,在java中文件拷贝流的读写,很容易就想到IO中的InputStream和OutputStream之类的,但是上网查了一下文件拷贝也是有很多种方法的,除了IO,还有 ...
- Java生成和操作Excel文件
JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该API非Windows操作系统也可以通过 ...
最新文章
- Linux futex 快速同步互斥机制简介
- python简单代码演示效果-演示python如何创建和使用一个简单的元类的代码
- DNS and Bind (二)
- GCD简介三:Dispatch Sources
- 一个简单HTML标签marquee实现动态滚动条
- ionic platform add ios, Error:spawn EACCES
- java与模式观察者模式_谈谈java中的观察者模式
- 新能源车牌识别系统的设计与实现
- STM32H7 USART 时钟初始化
- geom_path: Each group consists of only one observation. Do you need to adjust the group aesthetic?
- 腾讯云服务器计费模式包年包月/按量计费/竞价实例选择困难户
- 国家两部委印发《智慧家庭综合标准化体系建设指南》
- 计算机语言学国外排名,美国语言学专业排名
- 设备更新,工作室搬迁
- [经济生活基本知识]商品,货币,价值规律
- 病毒不可怕,就怕流氓有文化
- 内存不能为“read - written”的修复方法
- JavaScript W3School教程 思维导图
- rest_framework基础
- EXCEL基础:数据有效性设置与从身份证号码提取出生日期、性别操作
热门文章
- android textview获取背景颜色,android – 从textview获取背景颜色而不使用ColorDrawable(API 11)...
- 五个温度带的分界线_亚热带,暖温带,到底是些什么带?
- [GitHub]一个简单的网络驱动
- 最好电脑操作系统_操作系统都有哪些呢
- 计算机审计风险背景,计算机环境下审计风险的特征与对策研究 毕业论文.doc
- 傅里叶变换@(stft和istft)
- bootStrap库介绍
- flowjo软件使用方法_流式技术讲座流式分选技术、配色原则以及分析软件Flowjo的使用...
- 谷歌浏览器设置请求头_2020年 谷歌SEO优化 十大技巧(四)
- 输入学号姓名输出学号姓名c语言,急啊!!!求救了 C语言编一个链表,输出姓名和学号就好...