字节流

字节流

字节流的抽象超类

OutputStream

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

输出数据的 3 种方式:

方法名说明
abstract void write(int b)将指定的字节写入此输出流
void write(byte[] b)将 b.length 字节从指定的字节数组写入此输出流
void write(byte[] b, int off, int len)从指定字节数组的下标 off 开始写入 len 个字节输出到此输出流

InputStream

这个抽象类是表示输入字节流的所有类的超类。

输入数据的 3 种方式:

方法名说明
abstract int read()从输入流读取数据的下一个字节,如果已经达到流的末尾,则返回 -1
int read(byte[] b)从输入流读取一些字节数,并将它们存储到缓冲区 b,如果已经达到流的末尾,则返回 -1
int read(byte[] b, int off, int len))从输入流读取最多 len 字节的数据到一个字节数组,如果已经达到流的末尾,则返回 -1

文件字节流

FileOutputStream

文件输出流是用于将数据写入到输出流 File 或一个 FileDescriptor。

使用字节输出流写数据的步骤

  • 创建字节输出流对象(调用系统功能创建了文件,创建字节输出流对象,让字节输出流对象指向文件)
  • 调用字节输出流对象的写数据方法
  • 释放资源(关闭此文件输出流并释放与此流相关联的任何系统资源)

常用写法:

	FileOutputStream fos = null;
    try {
    	// 参数传入 true,表示字节将被写入到文件的末尾,即向文件追加内容。
    	// 否则相当于删除了原文件内容重新写入数据
    	// fos = new FileOutputStream("io.txt", true);
        fos = new FileOutputStream("io.txt");
        fos.write("hello world".getBytes());
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (fos != null) {
            try {
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
	// JDK1.7 引入了 try with resources 写法替代上面写法
    try (FileOutputStream fos1 = new FileOutputStream("io.txt")) {
        fos1.write("hello world".getBytes());
    } catch (IOException e) {
        e.printStackTrace();
    }

FileInputStream

文件输入流从文件系统中的文件获取输入字节,用于读取诸如图像数据的原始字节流。

	FileInputStream fis = new FileInputStream("io.txt");
    byte[] bytes = new byte[1024];
    int len;
    while ((len = fis.read(bytes)) != -1) {
        System.out.println(new String(bytes, 0, len));
    }
    fis.close();

字节缓冲流

BufferedOutputStream

该类实现缓冲输出流。 通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用。

	BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("io.txt"));
    bos.write("hello BufferedOutputStream ".getBytes());
    bos.close();

BufferedInputStream

该类为另一个输入流添加了缓冲输入等功能。当创建 BufferedInputStream 时,将创建一个内部缓冲区数组。当从流中读取或跳过字节时,内部缓冲区将根据需要从所包含的输入流中重新填充,一次有多个字节。

	BufferedInputStream bis = new BufferedInputStream(new FileInputStream("io.txt"));
	byte[] bytes = new byte[1024];
	int len;
	while ((len = bis.read(bytes)) != -1) {
		System.out.println(new String(bytes, 0, len));
	}
	bis.close();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Aiqian9

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

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

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

打赏作者

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

抵扣说明:

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

余额充值