字节输入流InputStream

字节输入流(InputStream)

java.io.InputStream抽象类是表示字节输入流的所有类的超类,注意该类是个抽象类

子类共性的成员方法

  1. public void close()方法的作用:关闭输入流并释放与该流有关的所有系统资源
  2. public int read()方法的作用:一次读一次字节,读完指针后移一位,读取到末尾返回-1
  3. public int read(byte[ ] b)方法的作用:从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中

介绍一次读取多个字符的方法

public int read(byte[ ] b)方法的作用:从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中
1、参数的作用是什么?
起到了缓冲的作用,存储每次读取到多个字节,数组长度一般定义为1024或者1024的整数倍

2、返回值的含义是什么?
返回的是每次读取的有效字节个数

举例说明该方法

public static void main(String[] args){
	FileInputStream fis = new FileInputStream("d:\\a.txt");//已知该文件中的内容为ABCDE
	byte[] bytes = new byte[2];

	int len = fis.read(bytes);
	System.out.println(len);//打印输出得到的是2
	System.out.println(new String(bytes));//打印输出得到的是AB

	int len = fis.read(bytes);
	System.out.println(len);//打印输出得到的是2
	System.out.println(new String(bytes));//打印输出得到的是CD

	int len = fis.read(bytes);
	System.out.println(len);//打印输出得到的是1
	System.out.println(new String(bytes));//打印输出得到的是ED

	int len = fis.read(bytes);
	System.out.println(len);//打印输出得到的是-1
	System.out.println(new String(bytes));//打印输出得到的是ED
}

解释如下
fis.read每次读取一个字节然后存入字节数组中,因为字节数组的长度是2所以依次读取两个字节才能把字节数组放满,每次放满后再次读取的话会覆盖上一次的字节数组,当我们依次读取到了第五个的时候,得到了E然后装入字节数组,覆盖掉原来的C,但是再次读取数组的时候读取到了结束标记,就不继续读取了,所以字节数组中现在剩下的是ED,因为D没有新的字节替换它,所以他的有效读取位数就是1,打印输出len得到的就是1。如果一个有效读取位数都没有的话,打印输出len得到的是-1.

由于InputStream类是抽象类,所以我们通过他的子类FileInStream类来学习它

文件字节输入流,该类的作用是把硬盘文件中的数据,读取到内存中使用

FileInStream类的构造方法

  1. FileInStream(String name)
  2. FileInStream(File file)

参数:读取文件的数据源

String name:文件的路径
File file:文件

构造方法的作用:

1、会创建一个FileInputStream对象
2、会把FileInputStream对象指向构造方法中要读取的文件

字节输入流将硬盘中的数据从内存中读取的过程

java程序---->JVM---->OS(操作系统)----->OS调用读取数据的方法----->读取数据

字节输入流的使用步骤:

1、创建FileInputStream对象,构造方法中绑定要读取的数据源
2、使用FileInputStream对象中的方法read,读取文件
3、释放资源

举例说明

已知a.txt中的内容为abc
public static void main(String[] args) throws IOException {
		//1、创建FileInputStream对象,构造方法中绑定要读取的数据源
        FileInputStream fis = new FileInputStream("d:\\a.txt");
        //2、使用FileInputStream对象中的方法read,读取文件
        int len = fis.read();
        System.out.println(len);//a.txt中的第一个字母是a,所以打印输出得到97
        int len = fis.read();
        System.out.println(len);//a.txt中的第一个字母是b,所以打印输出得到98
        int len = fis.read();
        System.out.println(len);//a.txt中的第一个字母是c,所以打印输出得到99
        int len = fis.read();
        System.out.println(len);//打印输出的为-1,表示读取完毕
        //3、释放资源
        fis.close();
    }

因为读取数据的时候过于重复我们还可以使用循环的方式优化代码

public static void main(String[] args) throws IOException {
		FileInputStream fis = new FileInputStream("d:\\a.txt");
        int len = 0;
        while ((len = fis.read()) != -1){// 因为不知道循环几次所以使用while 循环
            System.out.println(len);// 得到的结果也是97 98 99
        }
        fis.close();
}

public int read()方法的读取原理

一次读一次字节,读完指针后移一位,读取到末尾返回-1

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值