字节流和字符流以及缓冲区(简介和了解以及使用)

一、什么是流

  1. 流是个抽象的概念,是对输入输出设备的抽象,输入流可以看作一个输入通道,输出流可以看作一个输出通道。
  2. 输入流是相对程序而言的,外部传入数据给程序需要借助输入流。
  3. 输出流是相对程序而言的,程序把数据传输到外部需要借助输出流。

字节流和字符流以及缓冲区(简介和了解以及使用)_第1张图片

二、字符流和字节流

1.什么是字节流?
字节流–传输过程中,传输数据的最基本单位是字节的流。
2.什么是字符流?
字符流–传输过程中,传输数据的最基本单位是字符的流。

三、字节流(主要以Stream结尾)

常见字节流

  • OutputStream/InputStream

  • FileOutputStream/FileInputStream
    ---------对文件进行操作,所以需要一个文件作为实例化参数
    例如
    File file=new File("b.txt"); //这里不是新建文件,而是新建文件对象 FileOutputStream fos=new FileOutputStream(file);

  • BufferedOutputStream/BufferedInputStream(缓冲流)
    ---------BufferedOutputStream需要一个输出流作为实例化参数。
    例如BufferedOutputStream bos =new BufferedOutputStream (fos);//fos是上面声明过的

【BufferedOutputStream不是OutputStream的直接实现子类,是FilterOutputStream的子类】

四、字符流(主要以reader,writer结尾)

常见字符流

  • Reader/Writer

  • InputStreamReader/OutputStramWriter

  • FileReader/FileWriter

  • BufferedReader/BufferedWriter(缓冲流)

BufferedReader 类的继承结构以及构造方法:

// 继承结构
java.lang.Object
  |- java.io.Reader
        |-  java.io.BufferedReader

// 构造方法 默认缓冲区大小构造字符缓冲输入流对象
public BufferedReader(Reader in)
//指定缓冲区大小
public BufferedReader(Reader in,int size):

//它提供的方法
int read(char[] buf,int off,int len);//将字符读入到数组的某一部分。返回读取的字符数。达到尾部 ,返回-1。从偏移量off开始每次读取len个字节到buf中,返回结果是实际读取到的字节个数。
String readLine() throws IOException//读取一个文本行。
void close();                      //关闭该流。并释放与该流相关的所有资源。

BufferedWriter 类的继承结构以及构造方法:

// 继承结构
java.lang.Object
  |- java.io.Reader
        |-  java.io.BufferedWriter

// 构造方法 默认缓冲区大小构造字符缓冲输出流对象
public BufferedWriter(Writer out)
//指定缓冲区大小
public BufferedWriter(Writer out,int size):

//它提供的方法
void write(String str) throws IOException//写入字符串。
void write(int c) throws IOException
void write(char []buf,int off,int len)//写入字符数据的某一部分。从偏移量off开始,从buf中每次写入len个字节到输出流
void write(String s,int off,int len)//写入字符串的某一部分
void close();//关闭此流,再关闭前会先刷新他。

问:字节流和字符流的主要区别是什么呢?什么时候用哪个?

一.字节流在操作时不会用到缓冲区(内存),是直接对文件本身进行操作的。而字符流在操作时使用了缓冲区,通过缓冲区再操作文件。
二.在硬盘上的所有文件都是以字节形式存在的(图片,声音,视频),而字符值在内存中才会形成。

简单的说就是在你需要对文件进行操作的时候(比如读写文件,下载,移动各种)用字节流。但是在需要对文件的内容进行操作,读取的时候就要用字符流。

问:为什么要用缓冲流

如果是边读边写,就会很慢,也伤硬盘。缓冲区就是内存里的一块区域,把数据先存内存里,然后一次性写入,类似数据库的批量操作,这样效率比较高。就好我们要把一堆文件从一个磁盘移入到另外一个磁盘里,是一个一个移还是把所有文件放到一个文件夹再移比较快,这个文件夹就相当于一个缓冲区,提高速度。

以上就是简介,由于每个读写和输出流的方法基本上都差不多,就不一一列出来了,想要知道每个方法的含义和使用方法跳转链接:https://www.runoob.com/java/java-files-io.html直接访问可查看方法和流操作

你可能感兴趣的:(JAVA,JAVA,IO)