首页 > 其他分享 >InputStream--使用详解

InputStream--使用详解

时间:2022-11-11 18:13:31浏览次数:58  
标签:fis 字节 -- InputStream read 详解 数组 FileInputStream 读取

本篇可以号称是市面最全面的InputStream的用法详解,如下所示

在java中InputStream是字节输入流,用来将文件中的数据读取到java程序中。
InputStream是所有字节输入流的顶层父类,是一个抽象类。如果要用,需要使用子类。

最常用的子类:FileInputStream。

构造方法:
FileInputStream​(File file): 传递一个File类型的文件
FileInputStream​(String name): 传递一个String类型的文件路径

其他方法:
int read​(): 从文件中读取一个字节数的数据。并返回读取到的这个字节。 如果读取结束,返回的是-1.
int read​(byte[] b): 一次读取一个字节数组,输入流会把读取到的内容放入到这个字节数组中,并返回读取到的个数, 如果读取结束返回-1.
void close​()

使用步骤:
1. 创建一个FileInputStream流对象,绑定一个数据源文件。
2. 调用read方法读取数据。
3. 释放资源

注意: 这种方式不能读取中文,一个中文占多个字节,此时一次读取一个字节会把中文拆开读。
*/

public class Demo01InputStream {
    public static void main(String[] args) throws IOException {
        //创建一个FileinputStream对象,并绑定一个数据源文件
        // 如果文件不存在,则会抛出异常(File not fount excep)
        FileInputStream fis = new FileInputStream("E:\\test\\java265.txt");
        //调用read方法读取数据
        // int read​(): 从文件中读取一个字节数的数据。并返回读取到的这个字节。 如果读取结束,返回的是-1.
        int i;
        while ((i = fis.read()) != -1) {
           /*
                条件做了下面的事情
                1. 通过fis输入流调用read方法,读取一个字节。
                2. 把读取到的这个字节赋值给变量i。
                3. 判断i是否不等于-1,如果不是-1表示读取到了内容,就在循环中对读取到的内容进行处理。
                读取到的内容在i里面保存*/
            System.out.print((char) i);


        }
        //释放资源demo02_inputsteam

    }
}

 

使用字节输入流一次读取一个字节数组。
int read​(byte[] b): 一次读取一个字节数组,
输入流会把读取到的内容放入到这个字节数组中,并返回读取到的个数, 如果读取结束返回-1.
这种读取方式效率高
*/

public class Demo02InputStream {
    public static void main(String[] args) throws IOException {
        //创建Fileinptstream 流对象,并绑定源文件
        FileInputStream fis=new FileInputStream("E:\\Test\\java265.txt");
        //调用read方法读取数据.
        //        // int read​(byte[] b): 一次读取一个字节数组
        // 会将数据读取到字节数组里面。 字节数组长度是几,那么就最多一次读取几个。 并
        // 且返回读取到的个数,读取结束,返回-1
        //
        //        //使用循环,一次读取一个字节数组
        //        //定义一个字节数组,用来保存读取到的数据。

        byte arr[]=new byte[3];
        //定义一个变量来保存读到的个数
        int len;//返回读取到的个数
        //使用循环开始读取
        while((len=fis.read(arr))!=-1){
            /*
            上面条件作了下面的事情:
            1. 通过字节输入流fis调用read方法,将数据读取到Arr这个字节数组中
            2. 将读取到的有效个数返回,赋值给len。
            3. 判断len是否不等于-1,如果不等于-1,表示读取到了内容,就就在循环中进行处理.
                    读取出来的数组在bArr数组中放着
                    */
            //最后一次读取可能会有上次残留的数据,所以不能把字节数组的整体都转成String
            //System.out.println(new String(bArr));

            //读取到了几个内容,就把字节数组的几个元素转成字符串,并且打印
            System.out.println(new String(arr,0,len));



        }

    }
}

 

文件复制。

文件复制其实就是一边读,一边写,每读取一次就把读取到的内容写到文件中。
为了保证复制效率,我们采用一次读取一个字节数组的方式进行复制

思路:
1. 创建字节输入流对象,用来读取
2. 创建字节输出流对象,用来写入。
3. 开始读取,一次读取一个字节数组。
4. 把读取到的字节数组的内容写入到目的地文件
5. 循环 第3步 和 第4步
6. 释放资源
*/

public class FileCopy {
    public static void main(String[] args) throws IOException {
        //1. 创建字节输入流对象,用来读取
        FileInputStream fis = new FileInputStream("E:\\test\\java265.jpg");
        //2创建字节输出流对象,用来写入//没有会创建
        FileOutputStream fs = new FileOutputStream("java25.com");
        //3创建一个数组用来读取
        byte arr[] = new byte[1024 * 8];
        int len;//用来计数
        while ((len = fis.read(arr)) != -1) {
            //从文件中用字节数组读取数组,存储到字节数组中
//            每读取到一个内容,就把读取到的内容写入到目的地文件
            fs.write(arr,0,len);

        }
        //释放资源
        fs.close();
        fis.close();

    }

}

 

标签:fis,字节,--,InputStream,read,详解,数组,FileInputStream,读取
From: https://www.cnblogs.com/javalove2022/p/16881330.html

相关文章

  • EventBridge助力阿里云视觉智能开放平台AI智能存储实践
    本文作者:李建,阿里巴巴达摩院技术专家。01视觉智能开放平台(VIAPI)业务场景介绍阿里云视觉智能开放平台(简称VIAPI),是基于之前很多技术实践经验积累的AI能力的沉淀平台......
  • 利用内外参进行视觉测量
    一、 实验任务1.学习利用摄像机内参数对标定图像正畸2.学习摄像机外参数标定3.学习利用单应性矩阵对平面内目标进行测量二、 实验过程实验平台:MATLABR2016aToolbox_......
  • 用户动态权限菜单管理简单实现方式
    1.说明根据用户角色的权限进行菜单管理,根据拥有的权限访问范围内的菜单2.数据库表设计  2.1用户表CREATETABLE`sys_user`(`uid`int(11)NOTNULLAUTO_IN......
  • 百度富文本添加导入word文件
    如何做到ueditor批量上传word图片?1、前端引用代码<!DOCTYPE html PUBLIC "-//W3C//DTDXHTML1.0Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-tra......
  • C#设计模式之建造者模式
      原文网址:https://www.jb51.net/article/254976.htm场景:我们的冒险家,现在需要去武器商店买一把兵器,有刀和剑两种武器,冒险者可以告诉武器商人需要哪一种武器,然后武器商......
  • 如何使用webgl(three.js)实现3D储能,3D储能站,3D智慧储能、储能柜的三维可视化解决方
    前言上节课我们讲了《3D光伏发电》,与之配套的就是能量存储这节课我们主要讲讲储能,储能站,在分布式能源系统中起到调节用对电的尖峰平谷进行削峰填谷的作用。特别是小型储......
  • 【数据结构-树】并查集的基本操作(待整理)
    目录1数据结构定义2初始化3查找操作4并操作1数据结构定义#defineMAX50intUFSets[MAX];//并查集2初始化//参数:并查集SvoidInit(intS[]){inti;......
  • position:fixed iso兼容问题
    position:fixed;属性在IOS系统手机上会有很明显的抖动,解决方式:只需要在中间部分外层div添加css样式position:fixed;top:50px;bottom:50px;overflow:scroll;就可以实现......
  • CentOS 7 安装 ElasticSearch 8.5
    参考:InstallElasticsearchfromarchiveonLinuxorMacOS|ElasticsearchGuide[8.5]|ElasticInstallKibanafromarchiveonLinuxormacOS|KibanaGuide[......
  • 实现企业混合云架构两大关键能力​
    混合云的实现涉及异构系统的连接与整合,与具体业务场景相关,技术实现都需要比较高的复杂度。构建混合云的核心思想就是保证混合云产品拥有连接一切​一、连接一切IT设备的能力......