美文网首页
输入输出流的应用

输入输出流的应用

作者: 甜甜圈李 | 来源:发表于2020-06-02 23:52 被阅读0次

    什么是IO流?简单来说,就是用来处理设备之间的数据传输

    Java对数据的操作是通过流的方式,操作流相关的类都在IO包中

    按流向分为两种:1.输入流,2.输出流。

    按操作类型分为两种:1.字节流 --可以操作任何数据,在计算机中数据都是以字节的形式存储的;2.字符流 --只能操作纯字符数据。

    在IO流常用父类:1.字节流的抽象父类:InputStream和OutputStream;2.字符流的抽象父类:Reader 和Writer 。

    关系与IO程序在工具中的使用,使用前,导入IO包中相关的类;使用时,要关注好IO异常的处理;使用后,记得释放资源。

    那么关于IO流(FileInputStream),我们拿例子来说明一波。先明白read()方法,一次读取一个字节。

    //创建一个文件输入流对象,并关联test.txt

    FileInputStream fs = new FileInputStream("test.txt");

    //定义变量,记录每次读到的字节

    int a;

    //将每次读到的字节赋值给b并判断是否是-1

    while((a=fs.read()) != -1) {

    //打印每一个字节

    System.out.println(a);

    }

    //关闭流释放资源

    fs.close();

    在IO流中,FileInputStream返回值为什么是int? read()方法读取的是一个字节,为什么返回是int,而不是byte?

    因为字节输入流可以操作任意类型的文件,比如图片,音频等,这些文件底层都是以二进制形式的存储的,如果每次读取都返回byte,有可能在读到中间的时候遇到111111111,那么这11111111是byte类型的-1,我们的程序是遇到-1就会停止不读了,后面的数据就读不到了,所以在读取的时候用int类型接收,如果11111111会在其前面补上。24个0凑足4个字节,那么byte类型的-1就变成int类型的255了这样可以保证整个数据读完,而结束标记的-1就是int类型。

    在IO流中,FileInputStream返回值为什么是int? read()方法读取的是一个字节,为什么返回是int,而不是byte?

    因为字节输入流可以操作任意类型的文件,比如图片,音频等,这些文件底层都是以二进制形式的存储的,如果每次读取都返回byte,有可能在读到中间的时候遇到111111111,那么这11111111是byte类型的-1,我们的程序是遇到-1就会停止不读了,后面的数据就读不到了,所以在读取的时候用int类型接收,如果11111111会在其前面补上。24个0凑足4个字节,那么byte类型的-1就变成int类型的255了这样可以保证整个数据读完,而结束标记的-1就是int类型。

    对于IO流的FileOutputStream,我们也拿案例说明一下,它里面包含的方法: write()一次写出一个字节。

    //如果没有test.txt,会创建出一个

    FileOutputStream fos = new FileOutputStream("test.txt");

    //虽然写出的是一个int数,但是在写出的时候会将前面的24个0去掉,所以写出的一个byte

    fos.write(98);

    fos.write(99);

    fos.close();

    那么对于图片和音频的操作原理,可以关注好笔者,后续继续来给大家分享IO流的操作。

    (小编的另一个平台文章地址:https://zhuanlan.zhihu.com/p/124288097)

    相关文章

      网友评论

          本文标题:输入输出流的应用

          本文链接:https://www.haomeiwen.com/subject/zeudzhtx.html