java基础之 IO 流(InputStream/OutputStream)

Posted 我想月薪过万

tags:

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

基流 

上图中有句话写错了,应该是 字节流的根类。

文件输出/入字节流

 代码示例

心得:

  1. 读写文件流 关心 读的时候读多少,写的时候写多少,它没有限制一次只能读/写多少。
  2. 文件流的创建 到 文件流的关闭 为一个周期。
package IOTest;

import java.io.*;

/**
 * ClassName: RandomAccessFileTets <br/>
 * Description: <br/>
 * date: 2021/8/2 19:47<br/>
 *
 * @author yiqi<br />
 * @since JDK 1.8
 */
public class RandomAccessFileTets {
    public static void main(String[] args) throws Exception {
        //第一步:创建一个文件输入流
        FileInputStream fis = new FileInputStream("src/IOTest/test.txt");
        //第二步:创建一个文件输出流
        FileOutputStream fos = new FileOutputStream("src/IOTest/clone.txt",true);
        //第四步:规定一次性读取数据长度
        byte[] buffer = new byte[1024];
        while (true){
            //第三步:读取数据
            int len = fis.read(buffer);
            if (len == -1){
                break;
            }
            fos.write(buffer,0,len);
        }
        //关闭流
        fis.close();
        fos.close();
    }
}

 ByteArray字节流

 代码示例:

心得:

  1.  ByteArrayInputStream 主要作用是与内存数据互动,如果要与介质(如文件,网络,控制台)互动,还是得创建 文件流 (FileXXXStream)的
package IOTest;

import java.io.*;

/**
 * ClassName: RandomAccessFileTets <br/>
 * Description: <br/>
 * date: 2021/8/2 19:47<br/>
 *
 * @author yiqi<br />
 * @since JDK 1.8
 */
public class RandomAccessFileTets {
    public static void main(String[] args) throws Exception {
        String str = "关注我,不迷路---我想月薪过万的CSDN";
        //第一步:创建 ByteArrayInputStream
        ByteArrayInputStream bais = new ByteArrayInputStream(str.getBytes());
        //第二步:创建 ByteArrayOutputStream 参数 size 不写也没关系
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        //第三步:创建 FileOutputStream ,因为 FileOutputStream 是节点流 ,只有它 才能和 文件介质互动
        FileOutputStream fos = new FileOutputStream("src/IOTest/123.txt");
        //第四步:文件读写
        //规定一次读取数据大小
        byte[] buffer = new byte[1024];
        while (true){
            int len = bais.read(buffer);
            if (len == -1){
                break;
            }
            baos.write(buffer,0,len);
        }
        //写入文件
        baos.writeTo(fos);
        //关闭流
        bais.close();
        baos.close();
        fos.close();
    }
}

 效果展示

 Data字节流

代码示例

心得:

  1. 感觉这个累的左右就是  FileXXXStream() 本身
  2. 但是他有个优点,从上面第二章api图就可以看出,他是数据处理流,可以直接获取 java 的各个数据类型
package IOTest;

import java.io.*;

/**
 * ClassName: RandomAccessFileTets <br/>
 * Description: <br/>
 * date: 2021/8/2 19:47<br/>
 *
 * @author yiqi<br />
 * @since JDK 1.8
 */
public class RandomAccessFileTets {
    public static void main(String[] args) throws Exception {
        //创建输入流
        DataInputStream dis = new DataInputStream(new FileInputStream("src/IOTest/test.txt"));
        //创建输出流
        DataOutputStream dos = new DataOutputStream(new FileOutputStream("src/IOTest/clone.txt"));
        //读写数据
        byte[] buffer = new byte[1024];
        while (true){
            int len = dis.read(buffer);
            if (len == -1){
                break;
            }
            dos.write(buffer,0,len);
        }
        //关闭流
        dis.close();
        dos.close();
    }
}

缓冲字节流 

代码示例

package IOTest;

import java.io.*;

/**
 * ClassName: RandomAccessFileTets <br/>
 * Description: <br/>
 * date: 2021/8/2 19:47<br/>
 *
 * @author yiqi<br />
 * @since JDK 1.8
 */
public class RandomAccessFileTets {
    public static void main(String[] args) throws Exception {
        //创建输入流
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("src/IOTest/test.txt"));
        //创建输出流
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("src/IOTest/clone.txt"));
        //读写数据
        byte[] buffer = new byte[1024];
        while (true){
            int len = bis.read(buffer);
            if (len == -1){
                break;
            }
            bos.write(buffer,0,len);
            bos.flush();//当缓冲区装满了之后,自动导出
        }
        //关闭流
        bis.close();
        bos.close();
    }
}

总结

基流:InputStream、OutputStream

与文件打交道的节点流:FileInputStream、FileOutputStream

与内存打交道的节点流:ByteArrayInputStream、ByteArrayOutputStream

处理流:DataInputStream、DataOutputStream ||| BufferedInputStream、BufferedOutputStream

以上是关于java基础之 IO 流(InputStream/OutputStream)的主要内容,如果未能解决你的问题,请参考以下文章

Java基础知识之IO流

java IO之输入流——InputStream

javaio流之字节输入流:java.io.InputStream类及子类java.io.FileInputStream

java(jdk1.7) IO系列01之InputStream和OutputStream解析

Java中的IO流之输入流|乐字节

java io基础(java.io)