Java中IO流——字节流

本文详细介绍了Java中的字节流,包括字节输入流、字节输出流、字节缓冲流的使用。讲解了OutputStream和InputStream作为基类的作用,以及FileOutputStream、FileInputStream的具体操作。同时提到了字节缓冲流BufferOutputStream和BufferInputStream如何提高效率,并对比了不同读写方式的效率差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言: 上一篇博客,博主主要讲解了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.总结

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

做哈白日梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值