19.Java IO: BufferedInputStream && BufferedOutputStream
来源:互联网 发布:js实现dos窗口效果 编辑:程序博客网 时间:2024/04/28 13:56
本文是在Java IO: BufferedInputStream 和 Java IO: BufferedOutputStream翻译而来。
BufferedInputStream
BufferedInputStream类给你的输入流提供缓存。缓存可以提升一点输入输出的速度。BufferedInputStream每次读取更大的数据块到内存,而不是每次从网络或磁盘读取字节。当你从BufferedInputStream中读取字节,所有你是从它的内部缓存区读取数据的,当缓存已被完全读取,BufferedInputStream会读取另一个更大的数据块到内存缓存区。通常这样会比每次从InputStream读取一个字节要快太多,特别对磁盘和更大量的数据。
BufferedInputStream例子
给InputStream添加缓存,简单地讲它包装成BufferedInputStream。像这样:
InputStream input = new BufferedInputStream(new FileInputStream("c:\\data\\input-file.txt"))
和你看到的一样,用BufferedInputStream给无缓存的InputStream加缓存太简单了。BufferedInputStream内部创建字节数组,通过调用InputStream底层的InputStream.read(byte[])方法,试图填充数组。
给BufferedInputStream设置缓存大小
你可以内部用BufferedStream设置缓存大小。给BufferedInputStream的构造方法传一个缓存大小的参数,想这样:
int bufferSize = 8 * 1024;InputStream input = new BufferedInputStream( new FileInputStream("c:\\data\\input- file.txt",bufferSize));
这个例子设置了内部缓存大小为8KB。使用缓存大小为1024个字节的倍数是最好的。这样和大多数内置缓存的硬盘等工具工作最好。
除了对你的输入流添加缓存,BufferedInputStream的行为表现和InputStream一样。
BufferedInputStream最优缓存大小
要找出哪一个缓存大小在具体的硬件上回表现最好,你需要对不同的缓存大小做一些实验。最优缓存大小可能取决于你在磁盘或网络InputStream下使用BufferedInputStream。
在使用磁盘或网络流时,最优缓存大小也取决于电脑上的具体硬件。如果硬盘在任何方式下每次最小读取4KB数据,用小于4KB的缓存大小是很蠢得,用4kB倍数的缓存大小是更好的。比如,用6KB缓存大小也是很蠢的。
即使你的磁盘每次读取如4KB的数据块,用比4KB大的缓存仍是个好想法。磁盘擅长连续地读取数据-意味着它擅长读取在存储位置上一个接着一个的多个数据。因此,BufferedInputStream用16KB的缓存,或者64KB的缓存(或者更大)可能比只用4KB的缓存给你更好的性能。
也要记住的是,有些应硬盘有兆字节的读取缓存。如果你的硬盘以任意大小缓存读取数据,像64KB,读取文件到内存里,你也可以用一个读取操作获取所有的数据到BufferedInputStream里,而不是多个读取操作。多个读取操作会很慢,同时你也冒着在读取操作之间硬盘的读取缓存擦除,导致硬盘重新读取数据块到缓存里。
为了找到最优BufferedInputStream缓存大小,找到你的硬盘读取的数据块大小,可能也是它的缓存大小,确保缓BufferedInputStream缓存大小是这个大小的倍数。你确实得实验以找到最优缓存大小。通过测量不同缓存大小的读取速度就可以了。
mark()和reset()方法
注意一个有趣的关于BufferedInputStream的现象,那就是它支持mark()和reset()方法,这是从InputStream继承来的。不是所有的InputStream子类都支持这俩个方法。大体上,你可以调用markSupport()方法来确定已给出的InputStream支不支持mark()和reset()方法,但是BufferedInputStream支持这俩个方法。
BufferedOutputStream
BufferedOutputStream类给输出流提供缓存。缓存可以提升一点输入输出的速度。每次写更大的数据块,而不是每次向网络或磁盘写入字节。通常这样会要快太多,特别对磁盘和更大量的数据。
简单地讲OutputStream包装成BufferedOutputStream就可缓存OutputStream.像这样:
OutputStream output = new BufferedOutputStream( new FileOutputStream(" c:\\data\\output-file.txt"));
设置BufferedOutputStream缓存大小
你可以设置缓存大小来内部使用BufferedOutputStream。你像一个构造对象参数设置这个大小,像这样:
int bufferSize = 8 * 1024; OutputStream output = new BufferedOutputStream (new FileOutputStream( "c:\\data\\output-file.txt") ,bufferSize);
例子设置了内部缓存到8KB。最好使用1024字节倍数的缓存大小。这样和内置缓存的硬盘等硬件工作会最好。
除了对你的输出流加入缓存,BufferedOutputStream和OutputStream表现的完全一样。唯一不同的是,如果你完全保证到现在已写的数据刷入缓存、到网络或磁盘,需要调用flush()方法。
BufferedOutputStram最优缓存大小
要找出哪一个缓存大小在具体的硬件上回表现最好,你需要对不同的缓存大小做一些实验。最优缓存大小可能取决于你在磁盘或网络OutputStream下使用BufferedOutputStream。
在使用磁盘或网络流时,最优缓存大小也取决于电脑上的具体硬件。如果硬盘在任何方式下每次最小写入4KB数据,用小于4KB的缓存大小是很蠢得,用4kB倍数的缓存大小是更好的。比如,用6KB缓存大小也是很蠢的。
即使你的磁盘每次写入如4KB的数据块,用比4KB大的缓存仍是个好想法。磁盘擅长连续地写入数据-意味着它擅长吸入在存储位置上一个接着一个的多个数据。因此,BufferedOutputStream用16KB的缓存,或者64KB的缓存(或者更大)可能比只用4KB的缓存给你更好的性能。
为了找到最优BufferedOutputStream缓存大小,找到你的硬盘写入的数据块大小,可能也是它的缓存大小,确保缓BufferedOutputStream缓存大小是这个大小的倍数。你确实得实验以找到最优缓存大小。通过测量不同缓存大小的写入速度就可以了。
- 19.Java IO: BufferedInputStream && BufferedOutputStream
- Java IO BufferedInputStream和BufferedOutputStream
- JAVA IO之BufferedInputStream&BufferedOutputStream
- java Io 缓冲流 BufferedInputStream BufferedOutputStream 笔记
- Java IO流-BufferedInputStream和BufferedOutputStream
- java IO笔记(BufferedInputStream/BufferedOutputStream)
- java入门IO流--BufferedInputStream&&BufferedOutputStream
- java BufferedOutputStream和BufferedInputStream
- Java BufferedInputStream 和 BufferedOutputStream
- 黑马程序员 java IO BufferedInputStream BufferedOutputStream 读文件 写文件
- java基础之IO流中BufferedInputStream和BufferedOutputStream
- java中常用io流 BufferedInputStream和BufferedOutputStream
- java核心技术之IO流(四)BufferedInputStream和BufferedOutputStream
- Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream
- Java之IO(一) FileInputStream、FileOutputStream、BufferedInputStream、BufferedOutputStream
- Java的IO流--BufferedReader和BufferedWriter,BufferedInputStream和BufferedOutputStream
- IO<字节流>FileInputStream、FileOutputStream、BufferedInputStream、BufferedOutputStream
- IO流--字节流缓冲区(BufferedOutputStream,BufferedInputStream)
- 第七周项目2:求两点的距离(1)成员函数
- 深度学习概述:从感知机到深度网络
- 操作系统线程相关知识学习
- Go语言顺序编程
- 郑轻OJ 1090: 整数幂(多实例测试)
- 19.Java IO: BufferedInputStream && BufferedOutputStream
- 第七周项目2:求两点的距离(2)友元函数
- block 定义
- 常用的opencv函数速查
- 螺旋方阵
- Caffe 深度学习框架上手教程
- 第七周项目2:求两点的距离(3)一般函数
- windows10连接蓝牙耳机
- 图片库