目录:系统学习 Java IO---- 目录,概览html
BufferedInputStream 类为输入流提供缓冲。 缓冲能够加快IO的速度。 BufferedInputStream 不是一次从网络或磁盘读取一个字节,而是一次将更大的块读入内部缓冲区。 当从 BufferedInputStream 读取一个字节时,您正在从其内部缓冲区中读取它。 当缓冲区被彻底读取时,BufferedInputStream 将另外一个更大的数据块读入缓冲区。 这一般比从 InputStream 一次读取单个字节快得多,特别是对于磁盘访问和更大的数据量。java
例子:网络
InputStream input1 = new BufferedInputStream(new FileInputStream("D:\\test.txt")); int bufferSize = 8 * 1024; InputStream input2 = new BufferedInputStream(new FileInputStream("D:\\test.txt"), bufferSize);
最好使用 1024 字节倍数的缓冲区大小,最适合硬盘中的大多数内置缓冲等。
除了为输入流添加缓冲外,BufferedInputStream 的行为与 InputStream 彻底相同,也支持 mark() 和 reset(); 具体请参考 InputStream ,不赘述了;性能
应该使用不一样的缓冲区大小进行一些实验,以找出哪些缓冲区大小彷佛能够在你的具体硬件上提供最佳性能。 最佳缓冲区大小可能取决因而否将 BufferedInputStream 与磁盘或网络 InputStream 一块儿使用。学习
对于磁盘和网络流,最佳缓冲区大小也可能取决于计算机中的具体硬件。 若是硬盘一次至少读取 4KB,那么使用少于 4KB 的缓冲区是愚蠢的。 而后最好使用 4KB 倍数的缓冲区大小。 例如,使用 6KB 也是愚蠢的。code
即便你的磁盘读取例如块 一次 4KB ,使用大于此的缓冲区仍然是个好主意。 磁盘擅长顺序读取数据 - 这意味着它擅长读取位于彼此以后的多个块。 所以,使用带有 BufferedInputStream 的 16KB 缓冲区或 64KB 缓冲区(甚至更大)仍然能够提供比仅使用 4KB 缓冲区更好的性能。htm
BufferedOutputStream 类为输出流提供缓冲。 缓冲能够加快 IO 的速度。 您不是一次向网络或磁盘写入一个字节,而是一次写入一个更大的块。 这一般要快得多,特别是对于磁盘访问和更大的数据量。blog
参考 BufferedInputStreamget
和 BufferedInputStream 差很少,除了为输入流添加缓冲外,BufferedOutputStream 的行为与 OutputStream 彻底相同。 惟一的区别是,若是您须要绝对肯定到目前为止写入的数据是从缓冲区刷出并进入网络或磁盘,则可能须要调用 flush()
方法。input
参考 BufferedInputStream ;