write(byte b[], int off, int len)与write(byte b[])

2023-10-27

    在进行写文件的时候有时候返现,通过write(byte b[])方式写文件比原来的文件大一些。流程代码:

   public static void main(String[] args) throws Exception {
        long t1 = System.currentTimeMillis();
        File file = new File("d:/11.jpg");
        FileInputStream in = new FileInputStream(file);
        BufferedInputStream brin = new BufferedInputStream(in, 1024);

        File outFile = new File("d:/112.jpg");
        FileOutputStream out = new FileOutputStream(outFile);
        BufferedOutputStream bout = new BufferedOutputStream(out);
        byte input[] = new byte[1024];
        while ((brin.read(input))!= -1) {
            bout.write(input);
        }
        bout.close();
        out.flush();
        out.close();
        System.out.println((System.currentTimeMillis() - t1));
    }
看了下write(byte b[])的实现是

 public void write(byte b[]) throws IOException {
        write(b, 0, b.length);
    }
当在while循环里面写文件时,在最后一次如果剩余是562个byte;由于读取暂存到的byte是1024大小,write(byte b[])底层实现是偏移量是0,大小是byte的长度,所以最后一次写及时562任然写入1024。所以在最终写入的结果里面是比原始图片要大一些。那么需要改为,读到多少写多少。

public static void main(String[] args) throws Exception {
        long t1 = System.currentTimeMillis();
        File file = new File("d:/餐巾纸.jpg");
        FileInputStream in = new FileInputStream(file);
        BufferedInputStream brin = new BufferedInputStream(in, 1024*5);

        File outFile = new File("d:/餐巾纸2.jpg");
        FileOutputStream out = new FileOutputStream(outFile);
        BufferedOutputStream bout = new BufferedOutputStream(out);
        byte input[] = new byte[1024*5];
        int count;
        while ((count=brin.read(input))!= -1) {
            bout.write(input,0,count);
        }
        bout.close();
        out.flush();
        out.close();
        System.out.println((System.currentTimeMillis() - t1));
    }
总结:

write(byte b[], int off, int len)表示:

b 这一次写的数据

off 这次从b的第off开始写

len 这次写的长度。

public int read(byte[] b, int off, int len)
  • b -- 目标字节数组。

  • off -- 将读取的数据写入到数组b中,off表示从数据b的哪个位置开始写。

  • len -- 要读取的字节数。

  • IOException -- 如果发生I/ O错误。

  • NullPointerException -- 如果b为 null.

  • IndexOutOfBoundsException -- 如果off为负,len为负,或len大于b.length - off。

该方法返回读入缓冲区的总字节数,或如果没有更多的数据,因为数据流的末尾已到达返回-1。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

write(byte b[], int off, int len)与write(byte b[]) 的相关文章

  • linux服务器安装jdk,maven详细步骤

    linux服务器安装jdk maven以及nginx详细步骤 一 安装jdk 使用命令安装 二 安装maven 1 将下载好的maven包放入linux下自定义文件夹 2 配置maven环境 打开profile文件 命令如下 一 安装jdk
  • Spring采用properties配置多个数据库

    在一个项目中有这样的需求 上海和武汉采用不同的系统 每个系统都有自己的数据库 但是在上海的系统需要访问武汉的数据库 这就要在项目中配置两个数据源 下面是我给的SSH采用properties配置数据源的方法 1 要有两个properties文
  • Java中常见的异常类型是哪两种?他们有什么区别?

    Java中有两种异常 受检查的异常 checked 和不受检查的异常 unchecked 不受检查的异常不需要在方法或者是构造函数上声明 就算是方法或者是构造函数可能会抛出这样的异常 并且不受检查的异常可以传播到方法或者构造函数的外面 相反
  • JVM运行原理

    JAVA和JVM运行原理揭秘 JVM是java的核心和基础 在java编译器和os平台之间的虚拟处理器 它是一种利用软件方法实现的抽象的计算机基于下层的操作系统和硬件平台 可以在上面执行java的字节码程序 AD 这里和大家简单分享一下JA
  • 分布式环境下的数据一致性

    1 互联网技术的四大法宝 多线程 分布式 异步 缓存 2 事务 编程式事务 3乐观锁 悲观锁 基于状态机的乐观锁
  • java与C#的比较

    一 C 和java哪个更好 几天前 我的北理工研究生面试 老师问了我这样一个问题 你认为C 和java哪个更好 那么 作为读者的你 会怎么回答这道题呢 其实 在我看来 这道题无非是想问你c 和java有什么异同 同为开发语言 并不能说哪个更
  • 对象池(连接池):commons-pool2源码解析:GenericObjectPool的returnObject方法解析

    为什么会有对象池 在实际的应用工程当中 存在一些被频繁使用的 创建或者销毁比较耗时 持有的资源也比较昂贵的一些对象 比如 数据库连接对象 线程对象 所以如果能够通过一种方式 把这类对象统一管理 让这类对象可以被循环利用的话 就可以减少很多系
  • java内存结构

    一 Java内存分配 1 Java有几种存储区域 寄存器 在CPU内部 开发人员不能通过代码来控制寄存器的分配 由编译器来管理 栈 在Windows下 栈是向低地址扩展的数据结构 是一块连续的内存的区域 即栈顶的地址和栈的最大容量是系统预先
  • JSer做的模式悬浮窗体与Jquery做的分页

    今天在做web开发 上网搜索资料时 无意间发现了JSer 现简单介绍一下JSer JSer是一款类似于jQuery的开源脚本框架 使用JSer 将极大的简化您的javascript开发 使程序代码更加简洁和高效 使用JSer 您几乎无需再考
  • zookeeper源码(01)集群启动

    本文介绍一下zookeeper 3 5 7集群安装 解压安装 tar zxf apache zookeeper 3 5 7 bin tar gz 创建数据 日志目录 mv apache zookeeper 3 5 7 bin app zoo
  • Java使用Spire.Pdf实现PDF添加图片水印

    通过本文你将学到 Spire Pdf是什么 如何在项目中引入Spire Pdf依赖 项目中基于Spire Pdf实现PDF添加图片水印 一 Spire Pdf是什么 1 Spire Pdf是成都冰蓝科技有限公司开发的一款简单易用 功能强大的
  • 常用jar包用途说明

    jar包 用途 axis jar SOAP引擎包 commons discovery 0 2 jar 用来发现 查找和实现可插入式接口 提供一些一般类实例化 单件的生命周期管理的常用方法 jaxrpc jar Axis运行所需要的组件包 s
  • Java中文与Base64互转(解决中文乱码的问题)

    最近线上出现一个问题 前后端交互时 某些情况下 会有中文乱码的问题 解决思路 1 在后端先将中文转为 Base64 后再传递到前端 此中文在前端不做显示处理 2 前端将参数再传递回后端时 后端解析 Base64 得到中文字符串 packag
  • 关于Unsupported major.minor version 52.0报错问题解决方案

    目录 1 问题描述 2 问题分析 3 解决方案 步骤一 删除JDK1 7版本 步骤二 导入JDK1 8版本 步骤三 将新的JDK1 8引入到工程中 4 总结 1 问题描述 在启动项目工程中 当编译class文件的时候会报错一个 java l
  • java 使用RabbitMQ示例

    RabbitMQ简介 RabbitMQ是一个受欢迎的消息代理 通常用于应用程序之间或者程序的不同组件之间通过消息来进行集成 具有高可用高并发的优点 适合集群服务器 采用 Erlang实现 对主要的编程语言都有客户端支持 RabbitMQ环境
  • BeanUtils使用方法

    BeanUtils类可以帮助我们copy值到类的属性中 也可以copy一个对象到另一个对象 java view plain copy UserEO user new UserEO String key userName String val
  • Java学到什么程度才能叫精通?

    Java学到什么程度才能叫精通 全文分为 基础知识和进阶知识 下文java必会知识附答案 并为大家整理了一个pdf 所有的知识点和答案都在pdf里面 必会知识点及其答案 Java基础知识 https blog csdn net qq 166
  • SpringBoot不自动加载Shiro配置 (No bean of type 'org.apache.shiro.realm.Realm' found)

    在很多SpringBoot项目中 common或者parent 做了shiro依赖 这样其他模块项目 总是提示 No bean of type org apache shiro realm Realm found Action Please
  • java底层实现定时延时的途径

    Timer定时器 时间间隔示意 例子一 public class TestTimer private static Timer timer new Timer private static Logger logger LoggerFacto
  • SpringSecurity实现OAuth2.0 - 基础版授权服务

    OAuth2 0协议 OAuth3 0概述 OAuth2 0是一个关于授权的开放网络协议 该协议在第三方应用与服务提供平台之间设置了一个授权层 第三方应用需要服务资源时 并不是直接使用用户帐号密码登录服务提供平台 而是通过服务提供平台的授权

随机推荐