IO流学习1


前言

在Java程序中,数据的输入和输出操作以“流”(stream)的方式进行,Java语言提供了各种各样的“流”类来获取不同种类的数据。


我习惯把流分为四大类:

字节流字符流
输入流InputStreamReader
输出流OutPutStreamWriter

今天我们先来看输入流中的字节流,即字节输入流

一、InputStream

InputStream抽象类是所有字节输入流的超类,作用是将数据从文件中读取出来。
这里有一个问题,为什么是从文件中读取数据,而不是直接从电脑磁盘中读取呢?
这是因为程序并不能直接操作磁盘文件,只能操作文件缓冲区里的数据,所以我们需要先将文件从磁盘加载到内存中的文件缓冲区。

InPutStream的直接子类有:
FileInputStream
FilterInputStream
ByteArrayInputStream
等等
我们今天主要学习FileInputStream

二、FileInputStream(字节输入流)

从文件系统中的文件获取输入字节。 什么文件可用取决于主机环境。
用于读取二进制文件,如图片、音频、视频 等。每次读取一个字节

构造方法

通过打开与实际文件的连接创建一个FileInoutStream,该文件由File对象file命名。

        FileInputStream(File file)
        //例如
        File file=new File("one.text");
        FileInputStream fism=new FileInputStream(file);

通过打开与实际文件的连接创建一个FileInoutStream,该文件由文件系统中的路径名name名字。

       FileInputStream(String name)
       //例如
       File file=new File("one.text");
       FileInputStream fism1=new FileInputStream("one.text");

创建 FileInputStream通过使用文件描述符 fdObj ,其表示在文件系统中的现有连接到一个实际的文件。

FileInputStream(FileDescriptor fdObj)

文件描述符 fdObj是一个用来标识正在被进程使用的文件或者I/O设备的整数值。在操作系统中,每个打开的文件都会被分配一个唯一的文件描述符,用于访问和操作该文件。
由于文件描述符是操作系统层面的概念,在集成开发环境中不能直接查询某文件的文件描述符,在idea里可以通过下面的方法获取文件描述符。

   FileInputStream fism1=new FileInputStream("src/one.text");
        try {
            FileDescriptor fd=fism1.getFD();
            int fdValue=fd.hashCode();//hashCode()方法获得文件描述符的整数值
            System.out.println("该文件的文件描述符为:"+fdValue);
        } catch (IOException e) {
            e.printStackTrace();
        }

结果:
在这里插入图片描述

2.常用方法

        FileInputStream fism1=new FileInputStream("src/one.text");
       //1、返回与此文件输入流相关联的唯一的FileChannel对象。
        FileChannel fich=fism1.getChannel();

        try {
            //2、从该输入流读取一个字节的数据
            int byye=fism1.read();
            //3、从该输入流读取最多b.length个字节的数据为字节数组。
            byte[]bytes=new byte[10];
            int count=0;
            while ((count=fism1.read(bytes))!=-1){
                System.out.println(new String(bytes,0,count));
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        //4、关流
         fism1.close();
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值