Java IO 流

Posted byebai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java IO 流相关的知识,希望对你有一定的参考价值。

  一、字节流

  二、字符流

IO 的分类可以为:

 

按流操作的数据类型可以分为:字节流 、 字符流

按流的数据方向:输入流、输出流 等

 

 

 一、字节流

InputStreamread方法,一次读取一个字节,OutputStreamwrite方法一次写一个int。这两个类都是抽象类。意味着不能创建对象,那么需要找到具体的子类来使用。操作流的步骤都是:
第一步:1:打开流(即创建流)
第二步:2:通过流读取内容
第三步:3:用完后,关闭流资源
案例一:使用read 逐个读取
     File file = new File("d:/a.txt");

        InputStream inputStream = new FileInputStream(file);

        int length = 0;

        while ((length = inputStream.read())!=-1) {
            System.out.print((char)length);
        }

案例二:使用read 读取一个字节数组,提高效率

        File file = new File("d:/a.txt");

        InputStream inputStream = new FileInputStream(file);

        byte[] buf = new byte[1024];

        int length = 0;

        length = inputStream.read(buf);

        for(int i=0;i<length;i++){
            System.out.print((char)buf[i]);
        }    

案例三:read 使用字节数组缓存,提高效率

       FileInputStream fis = new FileInputStream(path);
       byte[] byt = new byte[1024];
       int len = 0;
       while ((len = fis.read(byt)) != -1) {
           System.out.println(new String(byt, 0, len));
       }
       fis.close();    
OutputStramwrite方法,一次只能写一个字节。成功的向文件中写入了内容。但是并不高效,如何提高效率呢?可以使用缓冲,
OutputStram类中有write(byte[] b)方法,将 b.length个字节从指定的 byte 数组写入此输出流中
案例四:write 写单个字符
        File file = new File("d:/a.txt");
        OutputStream outputStream = new FileOutputStream(file);

        outputStream.write(\'a\');
        outputStream.write(\'+\');
        outputStream.write(\'b\');
        outputStream.write(\'=\');
        outputStream.write(\'c\');
        outputStream.close();    

案例五: write 写一个 byte 数组

        File file = new File("d:/a.txt");
        OutputStream outputStream = new FileOutputStream(file);

        byte[] buf = "a+b = c".getBytes();
        outputStream.write(buf);
        outputStream.close();    

案例六:实现文件的拷贝

        InputStream inputStream = new FileInputStream("d:/a.txt");

        OutputStream outputStream = new FileOutputStream("d:/b.txt");

        byte[] buf = new byte[1024];

        int size = 0;

        while ((size=inputStream.read(buf))!=-1){
            outputStream.write(buf,0,size);
        }

        inputStream.close();
        outputStream.close();    

缓冲流

Java其实提供了专门的字节流缓冲来提高效率。BufferedInputStreamBufferedOutputStream。BufferedOutputStreamBufferedOutputStream类可以通过减少读写次数来提高输入和输出的速度。它们内部有一个缓冲区,用来提高处理效率。查看API文档,发现可以指定缓冲区的大小。其实内部也是封装了字节数组。没有指定缓冲区大小,默认的字节是8192。显然缓冲区输入流和缓冲区输出流要配合使用。首先缓冲区输入流会将读取到的数据读入缓冲区,当缓冲区满时,或者调用flush方法,缓冲输出流会将数据写出。
注意:当然使用缓冲流来进行提高效率时,对于小文件可能看不到性能的提升。但是文件稍微大一些的话,就可以看到实质的性能提升了。
      InputStream inputStream = new FileInputStream("d:/a.txt");
        OutputStream outputStream = new FileOutputStream("d:/b.txt");

        BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream);

        int size = 0;

        while ((size=bufferedInputStream.read())!=-1){
           bufferedOutputStream.write(size);
        }

        bufferedInputStream.close();
        bufferedOutputStream.close();
        inputStream.close();
        outputStream.close();

二、字符流



参考:https://www.jianshu.com/p/48f2fb0b79b5?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

以上是关于Java IO 流的主要内容,如果未能解决你的问题,请参考以下文章

Java-IO处理流

JAVA IO流相关代码(打印流 和 文件拼接)

JAVA IO流相关代码(打印流 和 文件拼接)

JAVA IO流相关代码(Serializable接口,管道流PipedInputStream类,RandomAccessFile类相关代码)

JAVA IO流相关代码(Serializable接口,管道流PipedInputStream类,RandomAccessFile类相关代码)

JAVA字节缓冲流代码实现所有类型文件的复制