IO两种操作的区别

字节操作

byte类型操作,所有数表示为byte数组

读取输出要先转换成byte类型,才能进一步转换为字符串

不会运用到缓存

常用于处理二进制数据

字符操作

操作character类型,所有数表示为character数组

可以直接读取输出字符串

需要用到缓存

常用于处理文本数据

设计程序测试字节流和字符流的读写差别

输出1999999个String来测试字节流的写入速度

输出1999999个String来测试字符流的写入速度

a)   分别使用字节操作与字符操作两种方式将对象写入硬盘,记录汇报两种方式的时间与所占硬盘空间

所占硬盘空间为大约1.17GB  两者相差很小

经测试,字符流的写入速度更快,快了大概十倍,且两者所占的内存相差很小

b)   分别使用字节操作与字符操作两种方式将硬盘数据读入内存,记录两种方式的时间消耗

测试字符流单字节读取和数组读取所需时间

测试字节流单字节和字节数组的读取速度

结果

可见字符流的读取速度比字节流要快,而且用数组可以大幅度加快读取速度

c)   在读取与写入时使用缓存(buffered stream),比较缓存方式的优劣,并设计场景体现出缓存方式的优势

测试字节缓存流读写文件所需时间(12MB的文件)

测试字节流读写文件所需的时间

得出的时间结果:

但是使用字符流和字符缓存流时,得到的结果是相反的

我认为是因为字符流本来就用了缓存区,经过了两次缓存区,效率反而更低了。

可看出,相比于不使用缓存,使用缓存后读取速度更快

使用场景:当要读写大文件,且电脑性能好的时候,可以大量使用缓存来提高读写速度。

d)   请使用C/C++(或者任意支持little-Endian的语言)完成题目2(b)中写入的两种文件的正确读取,并记录两种方式的时间消耗

字符流读写:

所使用的时间

可以看出,c语言的读写效率更高

结论

1.字符流基于字节流,字符流通过使用缓存等提升了读写速度。

2.在相同条件下,字节流与字符流的效率比约为1:20;,字符流是建立在字节流的基础上的,但是字符流使用了缓存,提高了效率;

3.应用场景:(1)字符流常用于处理文本数据,字节流常用于处理二进制数据

(2)在读写文件需要对文本格式化处理时使用字符流,仅仅是读写数据适合用字节流

4.可以使用数组读写的方式大幅度提高速度。

java io效率_JAVA IO操作的总结 和速度实验相关推荐

  1. java关闭io流_Java IO流关闭问题的深入研究

    前言 前几天看了一篇文章(见参考文章),自己动手试了下,发现有些不一样结论,作博客记录下,本文主要研究两个问题: 1.包装流的close方法是否会自动关闭被包装的流? 答:会. 2.关闭流方法是否有顺 ...

  2. java 异步模型_Java IO编程全解(三)——伪异步IO编程

    为了解决同步阻塞I/O面临的一个链路需要一个线程处理的问题,后来有人对它的线程模型进行了优化,后端通过一个线程池来处理多个客户端的请求接入,形成客户端个数M:线程池最大线程数N的比例关系,其中M可以远 ...

  3. java序列化编码_java IO操作(输入,输出,序列化,编码方式)示例代码 第一部分...

    File类主要功能有文件的创建,目录的创建,临时文件的创建,文件和目录的删除以及文件列表的获取和过滤工作.下面是一个关于File类的操作. package com.guan.chapter27.jav ...

  4. java io 输出流_Java IO 输入和输出流

    数据流是指一组有顺序的,有起点和终点的字节集合. 最初的版本中,java.io 包中的流只有普通的字节流,即以 byte 为基本处理单位的流.字节流用来读写 8 位的数据,由于不会对数据做任何转换,因 ...

  5. java.io.file()_Java IO(一):IO和File

    一.IO 大多数的应用程序都要与外部设备进行数据交换,最常见的外部设备包含磁盘和网络.IO就是指应用程序对这些设备的数据输入与输出,Java语言定义了许多类专门负责各种方式的输入.输出,这些类都被放在 ...

  6. java io运用_Java IO相关使用

    date: 2020-06-14 14:42:22 updated: 2020-08-21 17:35:45 Java IO相关使用 1. 文件 创建 File 对象的三种方式 一个路径名:File( ...

  7. java结构体系_java io结构体系

    Java IO体系结构看似庞大复杂,其实有规律可循,要弄清楚其结构,需要明白两点: 1. 其对称性质:InputStream 与 OutputStream, Reader 与 Writer,他们分别是 ...

  8. java 数据流对比_Java IO流之字符流字节流区别

    java IO流主要是对字符字节的操作,企业应用比较广泛,比如最常见的导入导出.... 一.IO流的分类: 1.根据处理数据类型的不同分为:字符流(Reader,Writer)和字节流(InputSt ...

  9. java 流 中文_Java IO流之中文乱码

    相信有过学过JavaEE的人们都有遇到过中文乱码问题吧,最简单的就是表单数据提交时中文出现乱码,乱码难解决吗?其实不难,只要掌握好编码的设置,乱码神马的一边去. 今天主要就讲讲一些常用的可以设置编码的 ...

最新文章

  1. 什么,PyTorch还能开发新药?哈佛推出这款工具包,10行代码训练“药神”模型...
  2. 接口自动化框架(java)--2.接口用例POST请求,参数配置
  3. 【问链财经-区块链基础知识系列】 第四十课 港版支付宝的区块链跨境汇款与Ripple、Circle大不同
  4. linux下root密码修改方法
  5. weka的java环境配置_Linux(ubuntu)环境下配置weka
  6. 从一个微型例子看“C/C++的内存分配机制”和“数组变量名与指针变量名”
  7. 怎样从Mysql官网下载linux版本的mysql安装包
  8. 前景检测算法(十三)--KDE2000
  9. 兰亭集势笔试题:用最优方法从LinkedList列表中删除重复元素
  10. [canvas基础]pcmobile写字板
  11. 前后端分离的微信小程序--校园二手交易平台
  12. 关于吾爱(52)破解网注册时临时安全验证码以及填完信息没有确认或提交按钮的问题
  13. c#通过126邮箱自动发送 微信端实现QQ邮箱邮件提醒
  14. 如何用代码实现发送qq邮件(详细代码)
  15. LA 4670 Dominating Patterns
  16. Volatility 工具分析
  17. 漫谈格兰杰因果关系(Granger Causality)
  18. R语言--模型的定阶、估计和显著性检验
  19. 「雕爷学编程」Arduino动手做(25)——MQ2气敏检测模块
  20. 非财务人员的财务培训教(一.二)------财务基础知识

热门文章

  1. 20200915 椭圆范数的三角不等式证明:sqrt(x^T*Q*x)
  2. Git复习(一)之简介、安装、集中式和分布式
  3. 杂项:高考填报志愿综合参考系统
  4. 机器学习/梯度下降算法
  5. MAX_DEPTH, MAX_ROUTERS and MAX_CHILDREN
  6. linux下的二进制文件的编辑和查看 -
  7. 解决IE下textarea不识别maxlength属性的问题
  8. 如何让.net程序自动运行在管理员权限下
  9. 正则匹配class并替换整个class为空
  10. Ubuntu GNOME单击任务栏图标最小化设置