Java中常用流对象的使用方法(字节流与缓冲流)

1 文件字节流
FileIputStream 通过字节的方式读取文件,适合所有类型的文件 (图像、视频、文本文件等)。java也提供了 FileReader专门读取文本文件。

import java.io.FileInputStream;

*public class FileStreamDemo {
    public static void main(String[] args) {
        FileInputStream fis = null;
        try {
            //创建文件字节输入流对象
            fis = new FileInputStream("e:/R.gif");
            int temp = 0;
            while((temp = fis.read()) != -1){
                System.out.println(temp);
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                if (fis != null){
                    fis.close();
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
}*
输出:	25
		0
		91
		132
		112
		93
		18
		...
		...
	注:字节数返回值大小在0-256之间

FileOutputStream 通过字节的方式写数据到文件中,适合所有类型的文件。Java也提供了 FileWriter 专门写入文本文件。

import java.io.FileInputStream;
import java.io.FileOutputStream;

public class FileStreamDemo {
    public static void main(String[] args) {
        FileInputStream fis = null;
        FileOutputStream fos = null;
        try {
            //创建文件字节输入流对象
            fis = new FileInputStream("e:/R.jpg");
            //创建文件字节输出流对象
            fos = new FileOutputStream("e:/aa.jpg");
            int temp = 0;
            while((temp = fis.read()) != -1){
                fos.write(temp);
            }
            //将数据从内存中写入磁盘中
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                if (fis != null){
                    fis.close();
                }
                if(fis != null){
                    fos.close();
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
}

通过缓冲区提高读写效率

方式一
通过创建一个指定长度的字节数组作为缓冲区,以此来提高Io流的读写效率。该方式适用于读取较大图片时的缓冲区定义。注意:缓冲区的长度一定是2的整数幂。一般情况下1024长度较为合适。

     import java.io.FileInputStream;
     import java.io.FileOutputStream;

public class FileStreamBufferedDemo {
    public static void main(String[] args) {
        FileInputStream fis = null;
        FileOutputStream fos = null;
        try {
            //创建文件字节输入流对象
            fis = new FileInputStream("e:/R.jpg");
            //创建文件字节输出流对象
            fos = new FileOutputStream("e:/aa.jpg");
            //创建一个缓冲区,提高读写效率
            byte[] buff = new byte[1024];

            int temp = 0;
            while((temp = fis.read(buff)) != -1){
                fos.write(buff,0,temp);
            }
            //将数据从内存中写入磁盘中
            fos.flush();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                if (fis != null){
                    fis.close();
                }
                if(fis != null){
                    fos.close();
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
    }

方式二
通过创建一个字节数组作为缓冲区,数组长度是通过输入流对象的available()返回当前文件的预估长度来定义的。在读写文件时,是在一次读写操作中完成文件读写操作的。注意:如果文件过大,那么对内存的占用也是比较大的。所以大文件不建议使用该方法。

import java.io.FileInputStream;
import java.io.FileOutputStream;

public class FileStreamBuffer2Demo {

    public static void main(String[] args) {
        FileInputStream fis = null;
        FileOutputStream fos = null;
        try {
            //创建文件字节输入流对象
            fis = new FileInputStream("e:/R.jpg");
            //创建文件字节输出流对象
            fos = new FileOutputStream("e:/aa.jpg");
            //创建一个缓冲区,提高读写效率
            byte[] buff = new byte[fis.available()];
            fis.read(buff);
            //将数据从内存中写入磁盘中
            fos.write(buff);
            fos.flush();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                if (fis != null){
                    fis.close();
                }
                if(fis != null){
                    fos.close();
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
}

2 缓冲字节流

通过字节缓冲流提高读写效率

Java缓冲流本身并不具有Io流的读取与写入功能,只是在别的流(节点流或其他处理流)上加上缓冲功能提高效率,就像是把别的流包装起来一下,因此缓冲流是一种处理流(包装流)。
当对文件或者其他数据源进行频繁的读写操作时,效率比较低,这是如果使用缓冲流就能够更高效的读写信息。因为缓冲流是先将数据缓存起来,然后当缓存区存满后或者手动刷新时再一次性的读取到程序或写入目的地。
因此缓冲流还是很重要的,我们再Io操作时记得加上缓冲流来提升性能。
BufferedInputStream和BufferedOutputStream这两个流是缓冲字节流,通过内部缓存数组来提高操作流的效率。

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class FileStreamBuffered3Demo {
    public static void main(String[] args) {
        FileInputStream fis = null;
        FileOutputStream fos = null;
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        try{
            fis = new FileInputStream("e:/R.jpg");
            bis = new BufferedInputStream(fis);
            fos = new FileOutputStream("e:/aa.jpg");
            bos = new BufferedOutputStream(fos);

            int temp = 0;
            while ((temp = bis.read())!= -1){
                bos.write(temp);
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
           try {
             //注意:关闭流顺序:“后开的先关闭”
               if(bis != null){
                   bis.close();
               }if (fis != null){
                   fis.close();
               }if (bos != null){
                   bos.close();
               }if(fos != null){
                   fos.close();
               }
           }catch (Exception e){
               e.printStackTrace();
           }
        }
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

游不动的小孙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值