Java IO流之字节输入流的使用详解

 更新时间:2022年08月23日 16:34:23   作者:糊涂涂是个小盆友  
这篇文章主要为大家详细介绍了Java IO流中字节输入流的使用,文中的示例代码讲解详细,对我们学习Java有一定的帮助,需要的可以参考一下

一、InputStream字节输入流

①、是一个抽象类,不能够创建对象,需要被继承才能够使用

②、在java.io包下,使用时需要导入

③、公共的方法:

方法一: int read()

方法二: int read(byte[] b)

方法三: void close()

更多方法请查看官方API

二、FileInputStream文件输入类

①、该类继承了InputStream,可以使用InputStream中的方法

②、能够把硬盘文件中的数据读取到内存中使用

③、构造方法

FileInputStream (String name)
FileInputStream (File file)

参数的含义:

name 是文件的路径

file 是文件

作用:

创建对象

把对象指定到构造方法中药读取的文件

④、使用步骤

1、创建FileInputStream对象,构造方法中绑定要读取的数据源

2、使用对象中的read方法,读取数据

3、释放资源

⑤、read()方法

读取到文件末尾会返回-1(不管读多少次)

⑥、补充:String的构造函数

1、String (byte[] bytes)  把字节数组转换为字符串

2、String (byte[] bytes,int offset,int length) 把字节数组的一部分转换为字符串,从offset位置开始,取length长

⑦、一次性读取多个文件

// todo 一次性读取多个字节
// 1、定义一个字节数组
byte[] bytes = new byte[3];
// 2、创建文件输入对象
FileInputStream fis = new FileInputStream("E:\\JavaCode\\JavaSE\\Day8-23\\src\\a.txt");
// 3、读取文件
int read = fis.read(bytes);
// 4、输出
System.out.println(new String(bytes));

⑧、使用循环一次性读取多个字节

// 一次性读取多个字节
byte[] bytes1 = new byte[1024];
FileInputStream fis = new FileInputStream("E:\\JavaCode\\JavaSE\\Day8-23\\src\\a.txt");
int len = 0;
while ((len=fis.read(bytes1))!=-1){
System.out.println(new String(bytes1,0,len));

​​​​​​​}

三、文件复制

原理:一读一写

目的:将A地址里面的a文件复制到B地址里面去

步骤:

1、创建一个字节输入流对象,构造方法中绑定要读取的数据源

2、创建一个字节输出流对象,构造方法中绑定要写入的目的地

3、使用字节输入流对象中的方法read读取文件

4、使用字节输出流对象中的方法write吧读取到的字节写入到目的地文件中

5、释放资源(先释放写的资源再释放读的资源,因为写完就代表已经读完了)

方式一:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileCopy {
    public static void main(String[] args) {

        try {
            long s = System.currentTimeMillis();
            // 1、创建字节输入流  起始地
            FileInputStream fis = new FileInputStream("E:\\JavaCode\\JavaSE\\Day8-23\\src\\a.txt");
            // 2、创建字节输出流  目的地
            FileOutputStream fos = new FileOutputStream("E:\\JavaCode\\JavaSE\\Day8-23\\src\\copy\\a.txt");
            // 3、读取数据并写入目的地
            int len = 0;
            while ((len = fis.read())!=-1){
                fos.write(len);
            }
            long e = System.currentTimeMillis();
            System.out.println("传输文件总共用时:"+(e-s)+"毫秒");
            // 4、释放资源
            fos.close();
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }




    }
}

耗时:2毫秒

方式二:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileCopy {
    public static void main(String[] args) {

        try {
            long s = System.currentTimeMillis();
            // 1、创建字节输入流  起始地
            FileInputStream fis = new FileInputStream("E:\\JavaCode\\JavaSE\\Day8-23\\src\\a.txt");
            // 2、创建字节输出流  目的地
            FileOutputStream fos = new FileOutputStream("E:\\JavaCode\\JavaSE\\Day8-23\\src\\copy\\a.txt");
            // 3、读取数据并写入目的地
            byte[] b = new byte[1024];
            int len = 0;
            while ((len = fis.read(b))!=-1){
                fos.write(b,0,len);
            }
            long e = System.currentTimeMillis();
            System.out.println("传输文件总共用时:"+(e-s)+"毫秒");
            // 4、释放资源
            fos.close();
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }




    }
}

两者的区别:可以很明显的看出来方式一和方式二的区别在于:在循环的时候判断条件那里出现的不一样,使用方式二的方式可以是文件复制更加的快捷,在初期推荐使用第二种方式进行文件的复制

到此这篇关于Java IO流之字节输入流的使用详解的文章就介绍到这了,更多相关Java 字节输入流内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java 常量池的实例详解

    Java 常量池的实例详解

    这篇文章主要介绍了Java 常量池的实例详解的相关资料,Java的常量池中包含了类、接口、方法、字符串等一系列常量值,需要的朋友可以参考下
    2017-09-09
  • SpringBoot启动自动终止也不报错的原因及解决

    SpringBoot启动自动终止也不报错的原因及解决

    这篇文章主要介绍了SpringBoot启动自动终止也不报错的原因及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • javax.mail.SendFailedException: Sending failed问题原因

    javax.mail.SendFailedException: Sending failed问题原因

    这篇文章主要介绍了javax.mail.SendFailedException: Sending failed问题原因,需要的朋友可以参考下
    2015-05-05
  • Java实现按权重随机数

    Java实现按权重随机数

    这篇文章主要介绍了Java实现按权重随机数,本文给出了提出问题、分析问题、解决问题三个步骤,需要的朋友可以参考下
    2015-04-04
  • 如何解决SpringBoot定时任务报错Unexpected error occurred in scheduled task问题

    如何解决SpringBoot定时任务报错Unexpected error occurred 

    这篇文章主要介绍了如何解决SpringBoot定时任务报错Unexpected error occurred in scheduled task问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • mybatis实现获取入参是List和Map的取值

    mybatis实现获取入参是List和Map的取值

    这篇文章主要介绍了mybatis实现获取入参是List和Map的取值问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • Java刷题之最小k个数的思路及具体实现

    Java刷题之最小k个数的思路及具体实现

    这篇文章主要介绍了Java刷题之最小k个数的思路及具体实现,最小K个数是一个经典的top-K问题,可以通过整体排序、建立小根堆或大根堆的方式解决,排序方式时间复杂度较高,适合数据量小的场景,小根堆适合k较小的情况,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-10-10
  • Scala实现冒泡排序、归并排序和快速排序的示例代码

    Scala实现冒泡排序、归并排序和快速排序的示例代码

    这篇文章主要介绍了Scala实现冒泡排序、归并排序和快速排序的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-06-06
  • 深入详解java高并发热点数据更新

    深入详解java高并发热点数据更新

    这篇文章主要为大家深入介绍了java高并发热点数据更新详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • 从Java到JSON一起探索Jackson的魔力

    从Java到JSON一起探索Jackson的魔力

    Jackson是一个用于处理JSON数据的开源Java库,这篇文章主要为大家介绍了Java是如何利用Jackson处理JSON数据的,感兴趣的小伙伴可以了解一下
    2023-05-05

最新评论