12. Java基础&字节流


前言

流是一种抽象概念,它代表了数据的无结构化传递。按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列。从流中取得数据的操作称为提取操作,而向流中添加数据的操作称为插入操作。用来进行输入输出操作的流就称为IO流。换句话说,IO流就是以流的方式进行输入输出。


提示:以下是本篇文章正文内容,下面案例可供参考

1. IO流概述和分类

介绍:

​ IO:即是Input和Output的缩写,是对数据的流入和流出的一种抽象。

​ 流:抽象概念,对数据传输的总称。数据在设备间的传输称为流,流的本质是数据传输。

​ IO流:就是用来处理设备间数据传输问题的。常见的应用:文件复制;文件上传;文件下载。

分类:

​ 1.按照功能划分

输入流:只能从中读取数据,而不能向其写入数据。

输出流:只能向其写入数据,而不能从中读取数据。

​ 2.按照处理单元来划分

字节流和字符流操作的方式基本上完全相同。操作的数据单元不同。

字节流:操作的是8位的字节 InputStream/OutputStream 作为字节流的基类

字符流:操作的是16位的字符 Reader/Writer 作为字符流的基类

​ 3.按照角色进行划分

节点流:可以直接从/向外部设备读取/写入数据的流,称之为节点流,节点流也被称之为低级流。

处理流:对于已经存在的流进行连接和封装,扩展了原来的读/写的功能。处理流也被称之为高级流。

IO流的使用场景:

  • 如果操作的是纯文本文件,优先使用字符流。
  • 如果操作的是图片,视频音频等二进制文件,优先使用字节流
  • 如果不确定文件类型,优先使用字节流。字节流是万能的流。

2.流的操作步骤:

字节输入流:

FileInputStream(String name):通过打开与实际文件的连接来创建一个FileInputStream,该文件文件系统中的路径名name命名

文件字节输入流读取文件内容的步骤:

  1. 创建流对象
  2. 创建一个缓存字节的容器数组
  3. 定义一个变量,保存实际读取的字节数
  4. 循环读取数据
  5. 操作保存数据的数组
  6. 关闭流

示例代码:

public class FileInputStreamDemo{
    public static void main(String[] args) throws IOException{
        //创建字节输入流对象
        FileInputStream fis=new FileInputStream("java\\fis.txt);
                                               
        int  a;
        while((a=fis.read())!=-1){
            System.out.println((char)a);
        }
       //释放资源
       fis.close();
    }
}

字节流抽象基类:

​ InputStream:这个抽象类是代表字节输入流的所有类的超类

​ OutputStream:这个抽象类是表示字节输出流的所有类的超类

​ 子类名特点:子类名称都是以其父类名作为子类名的后缀。

字节输出流:

FileOutputStream(String name):创建文件输出流以指定的名称写入文件

文件字节输出流写数据的步骤:

  1. 创建字节输出流对象(调用系统功能创建了文件,创建字节输出流对象,让字节输出流对象指向文件)
  2. 调用字节输出流对象的写数据方法
  3. 释放资源

示例代码:

public class FileInputStreamDemo{
    public static void main(String[] args) throws IOException{
        //创建字节输入流对象
        FileOutputStream fos=new FileInputStream("java\\fis.txt);
        //将指定的字节写入此文件输出流                          
       fos.write(97);
       //释放资源
       fos.close();
    }
}

3.字节流写数据的三种方式

方法:

方法名说明
void write(int b)将指定的字节写入此文件输出流 一次写一个字节数据
void write(byte[] b)将 b.length字节从指定的字节数组写入此文件输出流 一次写一个字节数组数据
void write(byte[] b, int将 len字节从指定的字节数组开始,从偏移量off开始写入此文件输出流 一次写一个字节数组的部分数据

4.字节流写数据的要注意的两点

4.1字节流写数据如何实现换行

  • windows:\r\n
  • linux:\n
  • mac:\r

4.2字节流写数据如何实现追加

  • public FileOutputStream(String name,boolean append)

  • 创建文件输出流以指定的名称写入文件。如果第二个参数为true,则字节将写入文件的末尾而不是开头。

示例代码:

public class FileOutputStreamDemo{
    public static void main(String[] args) throws IOException{
        //创建字节输出流对象
        FileOutputStream fos=new FileOutputStream("java\\fos.txt",true);
        //写数据
        for(int i=0;i<10;i++){
            fos.write("hello".getBytes);
            fos.write("\r\n".getBytes);
        }
        //释放资源
        fos.close();
    }
}

5.字节缓冲流

字节缓冲流介绍:

  1. IBufferOutputStream:该类实现缓冲输出流,通过设置这样的呼出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用。
  2. IBufferdInputStream:创建BufferdInputStream将创建一个内部缓冲区数组,当从流中读取或跳过字节时,内部缓冲区将根据需要从所包含的输出流中重新填充一次很多字节。

构造方法:

方法名说明
BufferedOutputStream(OutputStream out)创建字节缓冲输出流对象
BufferedInputStream(InputStream in)创建字节缓冲输入流对象

示例代码:

public class BufferStream {
    public static void main(String[] args) throws IOException {
        //字节缓冲输出流:BufferedOutputStream(OutputStream out)
        BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("D:\\JAVA\\IO\\bos.txt"));
        //写数据
        bos.write("hello\r\n".getBytes());
        bos.write("world\r\n".getBytes());
        //释放资源
        bos.close();

        //字节缓冲输入流:BufferedInputStream(InputStream in)
        BufferedInputStream bis=new BufferedInputStream(new FileInputStream("D:\\JAVA\\IO\\bos.txt"));

        //一次读取一个字节数据
        // int by;
        // while ((by=bis.read())!=-1) {
        //      System.out.print((char)by);
        // }

        //一次读取一个字节数组数据
        byte[] bys = new byte[1024];
        int len;
        while ((len=bis.read(bys))!=-1) {
            System.out.print(new String(bys,0,len));
        }
        //释放资源
        bis.close();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值