直接I/O写入与自定义缓存区I/O读写性能之间的区别
来源:互联网 发布:进口商品条码查询软件 编辑:程序博客网 时间:2024/04/28 22:43
import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;public class ReadWriteWithArray {public static void main(String [] args){try {// 直接读取写入数据long startTime = System.currentTimeMillis();ReadWriteWithArray.readWrite("a.txt", "b.txt");long endTime = System.currentTimeMillis();System.out.println("直接读取写入耗时:"+(endTime - startTime)+"ms");// 系统自定义缓存区读取写入数据startTime = System.currentTimeMillis();ReadWriteWithArray.readWriteBuffer("a.txt", "b.txt");endTime = System.currentTimeMillis();System.out.println("系统自定义缓存区读取写入耗时:"+(endTime - startTime)+"ms");// 自定义缓存区读取写入数据startTime = System.currentTimeMillis();ReadWriteWithArray.readWriteArray("a.txt", "b.txt");endTime = System.currentTimeMillis();System.out.println("通过自定义缓存区读取写入耗时:"+(endTime - startTime)+"ms");} catch (Exception e) {}}/** * 直接通过文件输入输出流读取与写入文件 * * @param fileFrom 写入路径 * * @param fileTo 写出路径 * * @exception IOException I/O异常 * * */public static void readWrite(String fileFrom, String fileTo) throws IOException{// 定义写入流InputStream is = null;// 定义输出流OutputStream os = null;try {is = new FileInputStream(fileFrom);os = new FileOutputStream(fileTo);while(true){// 数据读取int byteData = is.read();if(byteData == -1){// 读取完成break;}// 数据写出os.write(byteData);}} finally{// 关闭写入流if(is != null){is.close();}// 关闭输出流if(os != null){os.close();}}}/** * 通过系统缓存区类读取与写入文件 * * @param fileFrom 写入路径 * * @param fileTo 写出路径 * * @exception IOException I/O异常 * * */public static void readWriteBuffer(String fileFrom, String fileTo) throws IOException{// 定义写入流InputStream is = null;// 定义输出流OutputStream os = null;try {is = new BufferedInputStream(new FileInputStream(fileFrom));os = new BufferedOutputStream(new FileOutputStream(fileTo));while(true){// 数据读取int byteData = is.read();if(byteData == -1){// 读取完成break;}// 数据写出os.write(byteData);}} finally{// 关闭写入流if(is != null){is.close();}// 关闭输出流if(os != null){os.close();}}}/** * 通过自定义缓存区类读取与写入文件 * * @param fileFrom 写入路径 * * @param fileTo 写出路径 * * @exception IOException I/O异常 * * */public static void readWriteArray(String fileFrom, String fileTo) throws IOException{// 定义写入流InputStream is = null;// 定义输出流OutputStream os = null;try{is = new FileInputStream(fileFrom);os = new FileOutputStream(fileTo);// 拿取实际可读取字节数int availableLength = is.available();// 定义存放读取数据的数组byte[] totalBytes = new byte[availableLength];int byteData = is.read(totalBytes);// 数据写出os.write(byteData);}finally{// 关闭写入流if(is != null){is.close();}// 关闭输出流if(os != null){os.close();}}}}
结论,在文件没有超过1兆的情况下使用自定义缓存区读取写入性能比系统自带缓存区以及直接写入性能要高出很多,但是超过1兆的时候 就需要限制自定义读取数据的大小。
0 0
- 直接I/O写入与自定义缓存区I/O读写性能之间的区别
- 缓存I/O和直接I/O
- 缓冲I/O与直接I/O
- 同步 I/O 与异步 I/O 之间的差别
- 二进制I/O以及与文本I/O的区别
- 文件I/O与标准I/O的区别
- I/O复用之间的区别
- VB没有提供直接读写I/O口的方法
- 带缓存的I/O和不带缓存的I/O的区别
- 带缓存的I/O和不带缓存的I/O的区别
- NIO与I/O的区别
- I/O读写总结
- 高性能网络服务器--I/O复用 select poll epoll_wait之间的区别
- 唯快不破:高性能网络服务器--I/O复用 select poll epoll_wait之间的区别
- I/O缓存
- C标准I/O库函数与无缓存的I/O函数
- unbuffered i/o 与 standard i/o 区别
- 无缓冲I/O与有缓冲I/O区别
- java中ThreadPoolExecutor线程池的使用
- 漫谈C++:良好的编程习惯与编程要点
- mysql表添加分区
- 使用spark的dataframe实现单词统计
- easyui queryParams的使用
- 直接I/O写入与自定义缓存区I/O读写性能之间的区别
- 安卓盒子开发之遥控器调试
- JAVA学习(10) 继承(1)
- Qt中实现简单的菜单栏,工具栏和状态栏!
- ODAC安装教程
- 运动模板跟踪
- 有关sql优化
- 从一个标准的URL中获得文件的扩展名(新浪)
- Maven + Eclipse