本帖最后由 黑马刘涛 于 2012-7-18 19:53 编辑
- package com.itcast.test;
- import java.io.IOException;
- import java.io.InputStream;
- class MyBufferedInputStream extends InputStream {
- private InputStream in;
- private byte[] buf = new byte[1024*4];// 缓冲区
- private int pos = 0; // 字节数组指针
- private int count = 0; // 计数器,写入缓冲区中的字节数
- MyBufferedInputStream(InputStream in) {
- this.in = in;
- }
- @Override
- public int read() throws IOException {
- // TODO Auto-generated method stub
- if(count == 0) {
- pos = 0; // 缓冲区读完,清空继续写入
- count = in.read(buf);
- // 已到文件尾,返回-1
- if(count < 0)
- return -1;
- byte b = buf[pos];
- pos++;
- count--;
- return b & 255; // int
- }
- else if(count > 0) {
- byte b = buf[pos];
- pos++;
- count--;
- return b & 255;
- }
- return -1;
- }
- public void myClose() throws IOException {
- in.close();
- }
- }
复制代码 和毕老师写的一样,但是复制同样的文件,老毕写的那个只要300多毫秒,而我写的这个复制个文件慢的要死
原来是我没将数据写到缓冲区中,以上是修改后的代码:
发现一个新的问题:我写文件时刷新缓冲的输出流,比不刷新要慢很多。那么既然是这样,为什么buffferedOutputStream还要有flush方法。
|
|