java-IO操作——使用字节流读写数据

来源:互联网 发布:正德福飞机模型淘宝 编辑:程序博客网 时间:2024/06/05 05:06

使用带有缓冲的字节读取BufferedInputStream、 BufferedOutputStream

package TestSream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;public class ReadByteStream {    public static void main(String[] args) {        try {            //以Stream结尾的都是使用字节流            FileInputStream fis=new FileInputStream("Test.txt");            //只要 字节的数组数 不大于文件大小即可            byte input[]=new byte[40];            //使用字节数组读取            fis.read(input);            //当数据写完后,一定要将输入输出流关闭,后开的先关闭,先开的后关闭            fis.close();            //创建字符集的时候默认使用当前的字符集作为解码方式,由于当前使用的字符集使用的是UTF-8,所以此时不会乱码            //如果此时指定字符集为GBK,那就会出现乱码new String(input,"GBK")            String inputString=new String(input);            System.out.println(inputString);        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    }}

使用FileOutputStream写入数据

package TestSream;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;public class ReadbyBufferedByteStream {    public static void main(String[] args) {        //此时要显示出带有缓冲的字节流效率,我们在项目下放进一个视频文件        try {            //标准的字节流            FileInputStream fis=new FileInputStream("hello.qlv");            //把FileInputStream包装成带有缓冲的BufferedInputStream,为它指定一个输入流,也就是fis            //默认BufferedInputStream bis=new BufferedInputStream(fos,20000);            //此处可以指定缓冲区的大小,指定大小根据文件大小而定,但是要大于数组指定的大小            BufferedInputStream bis=new BufferedInputStream(fis,20000);            FileOutputStream fos=new FileOutputStream("hello_new.qlv");            BufferedOutputStream bos=new BufferedOutputStream(fos);            //每次读取2000个字节,大型文件对应的数组大一些,小型文件对应的小一些            byte input[]=new byte[2000];            int count=0;            //1970年到现在当前时间做经过的毫秒数            //读取前记录时间            long before=System.currentTimeMillis();            while(bis.read(input)!=-1){                //每次读取的话网count+1                count++;                bos.write(input);            }            bos.close();            fos.close();            bis.close();            fis.close();            //读取后再计算一次            System.out.println(System.currentTimeMillis()-before+"ms");            System.out.println("读取了 :"+count+"次");        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    }}16ms读取了 :3905
0 0