老问这问题,两个都答出来算加分项?

具体代码如下,没什么好说的直接说对比。

BufferedReader和RandomAccessFile的区别
RandomAccessFile 在数据越大,性能越差。因为他是数据文件的一个channel,支持读改原数据文件。

BufferedReader是读改数据文件的一个在内存的副本。

那RandomAccessFile的优点?

1.RandomAccessFile忽略了字符编码的处理,加快了处理速度

2.若是对数据操作在BufferedReader创立buffer的时候就做完了,RandomAccessFile自然就快了。

ps.

小文件RandomAccessFile,大文件BufferedReader

按行生成文件和按大小生成文件都实现了

BufferedReader提供处理字符编码的方式,使用InputStreamReader或者DataInputStream之类的。

    private static void fileRead() throws IOException {
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 = new FileWriter(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() throws IOException {
long time = System.currentTimeMillis();
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File(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左右

ps.

操作文件时,尽量使用以下动态的的符号

File.separator是分隔符不同系统是不一样的

System.getProperty("line.separator")是换行符不同系统是不一样的

    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() throws IOException {
FileWriter fw = new FileWriter(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还多什么道理啊。

java 读写操作大文件 BufferedReader和RandomAccessFile的更多相关文章

  1. Java快速读取大文件

    Java快速读取大文件 最近公司服务器监控系统需要做一个东西来分析Java应用程序的日志. 第一步探索: 首先我想到的是使用RandomAccessFile,因为他可以很方便的去获取和设置文件指针,下 ...

  2. 使用JAVA读写Properties属性文件

     使用JAVA读写Properties属性文件 Properties属性文件在JAVA应用程序中是经常可以看得见的,也是特别重要的一类文件.它用来配置应用程序的一些信息,不过这些信息一般都是比较少的数 ...

  3. java 流操作对文件的分割和合并的实例详解_java - JAVA

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 java 流操作对文件的分割和合并的实例详解 学习文件的输入输出流,自己做一个小的示例,对文件进行分割和合并. 下面是代 ...

  4. jdbc mysql crud dao模型 sql注入漏洞 jdbc 操作大文件

    day17总结 今日内容 l JDBC 1.1 上次课内容总结 SQL语句: 1.外键约束:foreign key * 维护多个表关系! * 用来保证数据完整性! 2.三种关系: * 一对多: * 一 ...

  5. java 读写properties (配置)文件

    Properties属性文件在Java应用程序中是经常可以看得见的,也是特别重要的一类文件.它用来配置应用程序的一些信息,不过这些信息一般都是比较少的数据,没有必要使用数据库文件来保存,而使用一般的文 ...

  6. 【基础巩固】文件流读写、大文件移动 FileStream StreamWriter File Path Directory/ ,m资料管理器(递归)

    C#获取文件名 扩展名 string fullPath = @"d:\test\default.avi"; string filename = Path.GetFileName(f ...

  7. java+上传大文件

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 先说下要求: PC端全平台支持,要求支持Windows,Mac,Linux 支持所 ...

  8. java+批量下载大文件

    我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 这次项目的需求: 支持大文件的上传和续传,要求续传支持所有浏览器,包括ie6,ie7,i ...

  9. java 上传大文件以及文件夹

    我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 这次项目的需求: 支持大文件的上传和续传,要求续传支持所有浏览器,包括ie6,ie7,i ...

随机推荐

  1. solidity_mapping_implementation

    solidity 中 mapping 是如何存储的 为了探测 solidity mapping 如何实现,我构造了一个简单的合约. 先说结论,实际上 mapping的访问成本并不比直接访问storag ...

  2. Jquery remove() empty() css()

    1删除元素remove,empty remove()   和 empty()的区别 remove:包括选中的元素包括其子元素, empty:清除其子元素. 2.css属性 多属性使用{}括起来. &l ...

  3. 独立线程监控配置文件是否变更,适用于更新了配置文件,不需要重启tomcat服务

    直接贴出来代码: package cn.leadeon.utils.file; import java.io.File; import java.io.FileInputStream; import ...

  4. 201621123012 《Java程序设计》第1周学习总结

    1. 本章学习总结 学习了java的理论知识和它与C语言的差别,什么是JVM,区分JRE与JDK并学习JAVA环境的安装.熟悉控制台下的常用命令,java函数的编写.熟练使用编写JAVA所需要的工具( ...

  5. 在ubuntu下安装KDE以及完全卸载KDE

    自由转载 ^_^ 同时请注明原文出处:http://www.cnblogs.com/wangvsa/archive/2012/07/22/2603626.html 这是一篇翻译,很多不必要的东西就没翻 ...

  6. kali linux之拒绝服务

    Dos不是DOS(利用程序漏洞或一对一资源耗尽的denial of service拒绝服务) DDoS分布式拒绝服务(多对一的攻击汇聚资源能力,重点在于量大,属于资源耗尽型) 历史 以前:欠缺技术能力 ...

  7. python-列表增删改查、排序、两个list合并、多维数组等

    一.list列表 数组 列表类型:list 下标从0开始,0,1,2... 二.列表增加元素 stus.append() 在列表末尾增加一个元素: stus.insert(,)  在指定位置添加一个元 ...

  8. 使用django进行发送 邮件

    我们来看一下 django发送 邮件的整个流程 第一步:例先去 网易163注册账号并激活发邮件功能 把授权码进行 开启 来到我们的项目setting中进行 一个配置: # 邮箱的配置信息 EMAIL_ ...

  9. 编写可维护的Javascript纪要

    第一部分: 编程风格 在大型项目开发中,因为项目可读性规范性的需要(就像<编写可维护性的Javascript>一书作者Nicholas Zakas大神所说,他们团队所有成员写出的代码就像是 ...

  10. SpringCloud-Zuul搭建

    一.创建工程,在pom中引入Zuul 二.重写路由加载类,实在路由的动态注册和路由转发 package com.genius.gateway.zuul; import com.genius.gatew ...