字节输入流InputStream
字节输入流(InputStream)
java.io.InputStream抽象类是表示字节输入流的所有类的超类,注意该类是个抽象类
子类共性的成员方法
- public void close()方法的作用:关闭输入流并释放与该流有关的所有系统资源
- public int read()方法的作用:一次读一次字节,读完指针后移一位,读取到末尾返回-1
- 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类的构造方法
- FileInStream(String name)
- 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
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号