java基础 ---- InputStream

InputStream的理解概述:

  • Input含义为进入内存,即从硬盘中读取数据,原理为:
     java程序-->JVM-->OS-->OS读取数据的方法-->读取文件(硬盘-->内存)

InputStream的使用概述:

  •  java.io.InputStream:字节输入流,此抽象类是表示字节输入流的所有类的超类。
    定义了所有子类共性的方法:
     -public abstract int read()从输入流中读取数据的下一个字节。
     -public int read(byte[] b) 从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。
     -public void close() 关闭此输入流并释放与该流关联的所有系统资源。
  •  InputStream的子类之一FileInputStream(文件字节输入流),作用是把硬盘文件中的数据,读取到内存中使用。
    定义了构造方法:
     -public FileInputStream(String name)通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名 name命名。
     -public FileInputStream(File file) 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的 File对象 file命名。
  • 使用数组读取,每次读取多个字节,减少了系统间的IO操作次数,从而提高了读写的效率,建议开发中使用

 InputStream的测试代码:

import java.io.FileInputStream;
import java.io.IOException;
    
public class InputStreamTest {
    public static void main(String[] args) throws IOException {
        show1();
   }
  /**show1():从文件中读取单个字节
   * 1.创建FileInputStream对象,构造方法中绑定要读取的数据源
   * 2.使用FileInputStream对象中的方法read,读取文件
   * 3.释放资源
   */
   public void show1() throws IOException {  
        //1.
        /* 构造方法的作用:
            1.会创建一个FileInputStream对象
            2.会把FileInputStream对象指向构造方法中要读取的文件的第一个字节
         */
        FileInputStream fis = new FileInputStream("09_IOAndProperties\\c.txt"); //文件内容为abc
        //FileInputStream fis = new FileInputStream(new File("09_IOAndProperties\\c.txt"));
        
        //2.int read()通过JVM,再通过OS,读取文件中的指针指向的字节并提升到int返回,连续读取时指针依次向后移,读取到文件的末尾返回-1
        len = fis.read();
        System.out.println(len);//97 a
        len = fis.read();
        System.out.println(len);// 98 b
        len = fis.read();
        System.out.println(len);//99 c
        len = fis.read();
        System.out.println(len);//-1
       /*
        int len = 0; //记录读取到的字节
        while((len = fis.read())!=-1){
            System.out.print((char)len);//abc
        }
        */

        //3.
        fis.close();
    }

   /**show2():从文件中读取字节数组
    *1.创建FileInputStream对象,构造方法中绑定要读取的数据源
    *2.使用FileInputStream对象中的方法read读取文件
    *3.关闭资源
    */
    public void show2() throws IOException {
        //1.
        FileInputStream fis = new FileInputStream("09_IOAndProperties\\b.txt");//文件内容为ABCDE
        
        //2.
        //int read(byte[] b) 从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。
        byte[] bytes = new byte[2]; // byte[]起到缓冲作用,存储每次读取到的多个字节,数组的长度一把定义为1024(1kb)或者1024的整数倍
        //
        //不同于读取单个字节int len记录每次读取的有效字节个数
        int len = fis.read(bytes); 
        System.out.println(len);//2
        //System.out.println(Arrays.toString(bytes));//[65, 66]
        //
        //String(byte[] bytes) :把字节数组转换为字符串
        System.out.println(new String(bytes));//AB
        len = fis.read(bytes);
        System.out.println(len);//2
        System.out.println(new String(bytes));//CD
        len = fis.read(bytes);
        System.out.println(len);//1
        //
        //String(byte[] bytes, int offset, int length) 把字节数组的一部分转换为字符串 offset:数组的开始索引 length:转换的字节个数
        System.out.println(new String(bytes,0,len));
        //System.out.println(new String(bytes)); ED 错于当数组容量大于剩余字节时,上次读取的数据没有被完全替换而重复读取,所以要通过 len ,获取有效的字节.
        len = fis.read(bytes);
        System.out.println(len);//-1       
        /*
        byte[] bytes = new byte[1024];
        int len = 0;
        while((len = fis.read(bytes))!=-1){
            //
            //当数组容量大于读取内容时,直接转换成字符串会生成大量空格,所以只转换有效字节
            System.out.println(new String(bytes,0,len));
        }
        */

        //3.
        fis.close();
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值