Java中IO流——字节流

前言: 上一篇博客,博主主要讲解了File类的相关知识,File类它主要是对于文件和目录的相关操作,却不能对于文件中的数据进行操作。所以java中IO流主要对于数据操作,将数据分为了:

  • 输入流:读数据;
  • 输出流:写数据;
    按数据类型分为:
  • 字节流:
    字节输入流;字节输出流;
  • 字符流:
    字符输入流;字符输出流;

1.字节流

首先字节流是万能的,可以对任意类型文件进行读写。
主要分为字节输入流和输出流:
InputStream为所有输入字节流的超类,已知的子类都以该类为后缀;(将已经有的文件数据读取出来)。
OutputStream为所有输出字节流的超类,已知的子类都以该类为后缀;(主要用于将读取的数据输出到文件)。

2.字节输出流

OutputStream属于抽象基类,主要是通过子类的形式进行写数据。
FileOutStream类属于OutputStream类的子类,通过文件输出流用于将数据写入File。

其构造方法:FileOutputStream(String name):创建文件输出流以指定的名称写入文件。
使用字节输出流写数据的步骤:

  • 创建字节输出流对象(这里创建字节输出流对象,是系统进行了创建了文件,并由字符输出流去指向该文件,在调用字节输出流对象在文件下进行写数据)。
  • 调用字节输出流对象的写数据方法。
  • 释放资源(关闭此文件输出流释放与此流相关联的任何系统资源) (重中之重!!)。

写数据的三种方式
在这里插入图片描述
  其中第二个可以通过字符串的getByte()的方法将字符串转换为字节数组进行。第三个是将指定的字节数组的索引开始,len则是输入的数量。
补充说明
在这里插入图片描述
主要事项:当你运用字节流来读取数据时,要小心换行符,其换行符也会占领一个字节,不同系统的换行符也不一样。

3.字节输入流

字节流读数据主要通过FileInputStream类进行,继承于InputStream类,(输入流,主要用于读取数据)。
读取方式:
在这里插入图片描述
  当读取的数据末尾后,在读取则返回-1;其中read()返回值为读取的字节的ascall值。read(byte[] b)返回值为每次读取的字节数;

(一次读一个字节数组)代码展示:

byte[] bys = new byte[1024]; //1024及其整数倍
        int len;
        while ((len=fis.read(bys))!=-1) {
    
    
            System.out.print(new String(bys,0,len));
        }//通过int  read(Byte[] byte)的形式进行
        //其中byte的数组长度决定了每次读取文件字节的个数
        //返回为读取的字节个数。读到末尾,返回-1;

4.字节缓冲流

BufferOutputStream:
该类实现缓冲输出流。通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必每个字节就调用底层系统。
BufferInputStream:
创建BufferInputStream将创建一个内部缓冲区数组,当从流中读取或者跳过字节时,内部缓冲区将根据需要从包含的输入流中重新填充,一次很多字节。
构造方法
字节缓冲输出流
BufferOutputStream(OutputStream out);
字节缓冲输入流
BufferInputStream(IntputStream In);
其原因(因为字节缓冲流只是提供一个缓冲区域来提高效率,然而其真正的操作是需要在字节流区实现的,所以所需要参数为字节流)。

四种不同读写数据的比较:
在这里插入图片描述
其中字节缓冲流一次读写一个字节数组耗时最少。

5.总结

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_46870007/article/details/121208097