JAVA IO操作的总结 和速度实验

Posted whycft

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA IO操作的总结 和速度实验相关的知识,希望对你有一定的参考价值。

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操作总结

Java-IO流总结

Java IO总结

Java IO总结

JAVA SOCKET 通信总结 BIONIOAIO ( NIO 2) 的区别和总结

java soket通信总结 bio nio aio的区别和总结