首页 > 编程语言 >Java中缓存区的基本使用

Java中缓存区的基本使用

时间:2023-04-24 20:16:00浏览次数:34  
标签:基本 文件 缓存 Java 读取 写入 FileInputStream true

前言

缓存区是一种内存空间,在计算机程序中被广泛使用来优化I/O操作的效率。在文件I/O操作中,缓存区用于缓存将要写入磁盘或读取到内存中的数据。这样可减少对磁盘的访问次数,提高I/O操作的效率。本文将介绍缓存区的基本使用以及一些注意点,并提供一个实例来演示如何将一个jpg图片复制一份。

使用缓存区进行文件复制

在本例中,我们将使用Java语言来进行文件复制操作,并使用缓存区来提高I/O操作的效率。具体步骤如下:

  1. 创建一个输入流对象,用于读取源文件。
  2. 创建一个输出流对象,用于写入目标文件。
  3. 创建一个缓存区对象,用于临时存放读取到的数据。
  4. 不断从输入流中读取数据,将读取到的数据写入缓存区。
  5. 当缓存区已满或已读取完毕时,将缓存区中的数据写入输出流,并清空缓存区。
  6. 重复执行步骤4~5,直到源文件全部读取完毕。
  7. 关闭输入流和输出流,释放资源。
        //根据数据源创建字节输入流对象
        FileInputStream fis = new FileInputStream("./src/copy/three/io/copy.jpg");
        //根据目的地创建输出流对象
        FileOutputStream fos = new FileOutputStream("./src/copy/three/io/target.jpg",true);
        //固定传输的数据大小(缓存区)至多为1024
        byte[] bys = new byte[1024];
        int len;
        while((len=fis.read(bys))!=-1){
            fos.write(bys,0,len);
        }

        fos.close();
        fis.close();

  注意:这里在创建输出流对象添加了一个true形参

在上述代码中,我们使用了FileInputStreamFileOutputStream类来进行文件读写操作。缓存区的大小为1024字节,在每次循环中读取1024字节的数据。当缓存区已满或已读取完毕时,将缓存区中的数据写入输出流,并清空缓存区。最后,我们关闭输入流和输出流,释放资源。

二次运行后出现的变化:

当我们第二次运行文件之后,我们打开target.jpg会发现大小变成了原来的两倍,出现这种情况的原因是前面使用了追加模式打开目标文件。这样,在进行文件复制时,新的内容会被添加到目标文件的末尾,所以原来的大小加上新追加的大小刚好等于原来的两倍。

注意点:

对于FileInputStream对象,不需要传入true参数。在使用FileInputStream读取文件时,文件读取指针会自动跳到上一次byte数组的最后一个位置,因此在下一次读取时,会从上一次读取结束的位置开始继续读取。而FileOutputStream则没有这个功能,需要手动控制写入的位置,比如使用write方法进行写入操作。

总结:

在学习Java中的IO流的时候,总是将向文件中添加内容(write方法)误以为重新新建一个文件,在我的错误认知中,每次添加write方法需要添加true。但这是不对的,write方法是将字节数据添加到文件中,在一次文件创建过程中并不会覆盖原来的数据,只有新建相同的文件的时候,true才可以决定是否追加内容。

 

标签:基本,文件,缓存,Java,读取,写入,FileInputStream,true
From: https://www.cnblogs.com/new-one/p/17350701.html

相关文章

  • java执行linux语句
    publicclassCommandUtil{/***在指定路径下执行一条命令,不能执行cd之类的命令**@paramcommand要执行的Linux命令*@paramdir目标路径,在该路径执行上述Linux命令*@return命令执行后显示的结果*@throwsIOException*/......
  • Java中Runnable和Callable的区别 Runnable接口
    Callable接口从Java1.0开始,它是java.lang包的一部分从Java1.5开始,它是java.util.concurrent包的一部分。Runnable接口不能返回计算的结果。Callable接口可以返回一个任务的并行处理的结果。Runnable接口不能抛出一个有检查的异常。Callable接口可以抛出一个有检查的异常。......
  • java反序列化(五) JNDI注入
    JNDI注入前置知识JNDIJNDI(JavaNamingandDirectoryInterface)是一个应用程序设计的API,为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口。可以通过字符串来锁定一个对象JNDI支持的服务主要有以下几种:RMI(JAVA远程方法调用)LDAP(轻量级目录访问协......
  • Java中null和“”的区别
    null和空字符串('')虽然都是没有任何内容,但是null却输出空指针异常,因为堆内存中根本就没有这个东西。他们的区别可相当大,虽然都是没有信息,但是null代表堆内存中根本没有这个东西,这个对象不存在,怎么执行indexof操作?空字符串虽然没有信息,但是是有内存空间的,所以null与空字符串主要......
  • springboot mybatis 动态调用oracle存储过程,通过存储过程名称,就能动态调用存储过程、j
    由于在开发业务时,可能同时调用的存储过程不知道参数,但是参数从界面、或已经存储在数据库的获取,所以就不希望手动写存储过程的参数,通过简化的调用。能不能写个动态的业务,只输入存储过程名称,自动获取存储过程参数,并且参数的数据从前台传递过来,这个就通用了。只写一个通用方法,就可以......
  • Java 依赖注入(DI)
    只要做过Java一段时间,基本上都会遇到这个问题。DependencyInjection(DI)中文称之为依赖注入。都说了Spring的关键部分就是DependencyInjection(DI),但是什么是依赖,为什么要注入,基本上没怎么找到使用简单文字说明的本文尝试用土话把这个问题说明白。这里有2个概念,依赖和注入。......
  • Django 静态文件 request对象方法 pycharm和Django连接MySQL Django模型层初步了解 基
    目录静态文件一、概念静态文件:不经常变化的文件,主要针对html文件所使用到的各种资源。例如:css文件、js文件、img文件、第三方框架文件ps:Django针对静态文件资源需要单独在根目录创建一个static目录统一存放,该目录下的文件类型还有很多,例如:utils目录,plugins目录,li......
  • java -- 注解
    注解注解概述定义:注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。作用分类:编写文档:通过代码里标识的注解生成......
  • Java
    HashSetcontainsaddStack+emptypeekpoppush(add)sizeHashMapvalueOf(value)get(key),put(key,value),isEmpty()containsKey(key)containsValue(value)remove(key)cnt.merge(x,1,Integer::sum);QueueQueueq=newLinkedList<>();Priorit......
  • 云原生周刊:2023 年 Java 开发人员可以学习的 25 大技术技能
    文章推荐2023年Java开发人员可以学习的25大技术技能这篇文章为Java开发人员提供了2023年需要学习的一些重要技能,这些技能涵盖了现代Java开发、大数据和人工智能、安全性、分布式系统和区块链、以及其他领域。Java开发人员应该根据自己的需求和职业规划,选择适合自己......