api进阶Day3使用文件流对文件进行复制、使用块读写一组字节,使用byte数组提高读写的效率、返回当前时间。

使用文件流对文件进行复制:

package io;

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

/**

  • 使用文件流完成文件的复制操作
    /
    public class CopyDemo {
    public static void main(String[] args) throws IOException {
    // FileInputStream fis = new FileInputStream(“image.jpg”);
    // FileOutputStream fos = new FileOutputStream(“image_cp.jpg”);
    FileInputStream fis = new FileInputStream(“01.rmvb”);
    FileOutputStream fos = new FileOutputStream(“01_cp.rmvb”);
    /

    image.jpg文件内容
    11001100 00110011 11110000 00001111 10101010 01010101 …
     第1次调用:d = fis.read();
     11001100 00110011 11110000 00001111 10101010 01010101 ...

     ^^^^^^^^
     读取的字节
     d的2进制:00000000 00000000 00000000 11001100

     fos.write(d);
     d:00000000 00000000 00000000 11001100
                                  ^^^^^^^^
                                  写出的字节
     image_cp.jpg文件数据:
     11001100
  */
 int d;//记录每次读取的字节内容
 long start = System.currentTimeMillis();//获取当前系统时间的毫秒值
 while(  (d = fis.read()) != -1    ) {//若读取到了-1则应当停止循环,没有读取到-1则应当抄
     fos.write(d);
 }
 long end = System.currentTimeMillis();//获取当前系统时间的毫秒值

 System.out.println("复制完毕,耗时:"+(end-start)+"ms");
 fos.close();
 fis.close();

}
}

使用块读写一组字节,使用byte数组提高读写的效率:

package io;

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

/**

  • 提高每次读写的数据量减少实际读写的次数可以提高读写效率
  • 块读写:一次读写一组字节
    /
    public class CopyDemo2 {
    public static void main(String[] args) throws IOException {
    FileInputStream fis = new FileInputStream(“01.rmvb”);
    FileOutputStream fos = new FileOutputStream(“01_cp.rmvb”);
    /

    java.io.InputStream超类上定义了块读字节的操作:
    int read(byte[] data)
    一次性读取给定字节数组data总长度的字节量并将读取到的所有字节存入到该数组中。
    返回值表达本次实际读取的字节数量。如果返回值为整数-1则表示读取到了流的末尾。
     文件内容(6字节):
     11001100 00110011 11110000 00001111 10101010 01010101

     byte[] data = new byte[4];//4字节长的数组
     int len = 0;//记录每次实际读取的字节数

     第一次调用len = fis.read(data);
     一次性尝试从文件中读取data数组长度的字节量(本案例:4个字节)
     11001100 00110011 11110000 00001111 10101010 01010101
     ^^^^^^^^ ^^^^^^^^ ^^^^^^^^ ^^^^^^^^
     data:{11001100 00110011 11110000 00001111} 数组中存放的是本次读取的4字节内容
     len:4 这里的4是表达本次实际读取到了4个字节

     第二次调用len = fis.read(data);
     一次性尝试从文件中读取data数组长度的字节量(本案例:4个字节)
     11001100 00110011 11110000 00001111 10101010 01010101 文件末尾
                                         ^^^^^^^^ ^^^^^^^^ ^^^^^^^^ ^^^^^^^^
                                         本次实际仅读取到了2个字节
     data:{10101010 01010101 11110000 00001111}
           |--本次读取的字节--||---上次的旧数据---|
     len:2 本次实际仅读取到了2个字节

     第三次调用len = fis.read(data);
     11001100 00110011 11110000 00001111 10101010 01010101 文件末尾
                                                           ^^^^^^^^ ^^^^^^^^ ^^^^^^^^ ^^^^^^^^
     data:{10101010 01010101 11110000 00001111}
           |--------没有变化,都是旧数据--------|
     len:-1 表达文件末尾

     java.io.OutputStream超类上定义了块写操作
     void write(byte[] data)
     一次性将给定的字节数组中所有的字节写出

     byte[] data:{10101010 01010101 11110000 00001111}
     fos.write(data)
     文件数据:
     10101010 01010101 11110000 00001111

     void write(byte[] data,int offset,int len)
     一次性将给定的字节数组从下标offset处开始的连续len个字节写出
     byte[] data:{10101010 01010101 11110000 00001111}
                           ^^^^^^^^ ^^^^^^^^
     fos.write(data,1,2):将data数组中从下标1开始的连续2个字节一次性写出

     文件数据:
     01010101 11110000

  */
 //编译后:byte[] data = new byte[10240];
 byte[] data = new byte[1024*10];//10kb
 int len = 0;//记录每次实际读取的字节数

 long start = System.currentTimeMillis();
 while( (len = fis.read(data)) != -1  ){
     fos.write(data,0,len);
 }
 long end = System.currentTimeMillis();
 System.out.println("复制完毕,耗时"+(end-start)+"ms");

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

}
}

返回当前时间:

package io;

public class CurrentTimeDemo {
public static void main(String[] args) {
//返回的UTC时间,1970年1月1日 00:00:00到当前系统时间之间经过的毫秒
long ms = System.currentTimeMillis();
System.out.println(ms);
long max = Long.MAX_VALUE;
System.out.println(“公元:”+(max/1000/60/60/24/365+1970));

Original: https://www.cnblogs.com/Bafanqwq/p/16599825.html
Author: 八幡qwq
Title: api进阶Day3使用文件流对文件进行复制、使用块读写一组字节,使用byte数组提高读写的效率、返回当前时间。

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/683647/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • RocketMQ扫盲篇

    本篇博客主要参考:《浅入浅出》-RocketMQ 敖丙APACHE-RocketMQ Gitee RocketMQ官方文档RocketMQ 实战与进阶 GitChat 又是好久没有…

    技术杂谈 2023年7月25日
    075
  • OS第三章错题

    OS第三章错题 ​ 现在看不知道当时为啥做错了…… ​ 这个题要做对,就要分清楚作业和进程不同的状态。作业有收容、运行、完成三种状态。其中在运行时,作业内的…

    技术杂谈 2023年7月11日
    076
  • iOS 其他第三方框架

    YTKKeyValueStore – Key-Value存储工具类,说明。TMCache – TMCache 是 Tumblr 开源的一个基于 key/va…

    技术杂谈 2023年5月30日
    0149
  • win10 升级到 21H1

    REF: Win10 20H2版本怎么升级到Win10 21H1版本? 访问微软win10 https://support.microsoft.com/zh-cn/windows/…

    技术杂谈 2023年5月31日
    0126
  • Postman 正确使用姿势

    前言: 请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i 简介: Postman是一个接口测试工具,在做接口测试的时候,Postman相当于一个客户端,它可以模拟用户发起的…

    技术杂谈 2023年7月11日
    068
  • 图文详解YUV420数据格式

    很多人对YUV数据格式不清楚,以至于在做视频的时候出现了一些不可预知的错误(比如说图像带有点、颜色不对等)。今晚是周末放假,我就抽点时间来给大家介绍一下。 提示: 读下面的文字时,…

    技术杂谈 2023年5月31日
    0104
  • UNR #6

    当 hehe 蚤和网友面基成功时,网友可以跟着 hehe 蚤一起走。因此,任何面基方案必然可调整为最后一个时刻 hehe 蚤和所有网友处于同一位置的情况。 直接枚举每条边 ((u,…

    技术杂谈 2023年6月21日
    0140
  • PyQt5 UI文件的使用方法

    ################################ PyQt5中文网 – PyQt5全套视频教程 # https://www.PyQt5.cn/ # 主讲: 村长 #…

    技术杂谈 2023年5月31日
    098
  • Swagger3.0天天刷屏,真的香吗?

    前言 官方文档如何说? Spring Boot版本说明 添加依赖 springfox-boot-starter做了什么? 撸起袖子就是干? 定制一个基本的文档示例 文档如何分组? …

    技术杂谈 2023年7月24日
    089
  • 综合案例_创建数据库

    技术选型: web层: Servlet:前端控制器 html:视图 Filter:过滤器 BeanUtils:数据封装 jackson:json序列化工具 Service层 Jav…

    技术杂谈 2023年6月22日
    093
  • wmic 命令的一个汇总,功能很强大

    获得系统版本信息wmic datafile where Name=’c:\windows\explorer.exe’ get Manufacturer,Ve…

    技术杂谈 2023年6月1日
    098
  • 页面国际化

    页面国际化 有的时候,我们的网站会去涉及中英文甚至多语言的切换,这时候我们就需要对页面进行国际化设计了。 6.1 准备工作 在IDEA中统一设置properties的编码格式 6….

    技术杂谈 2023年6月21日
    0102
  • N68第一周作业

    1. 图文并茂解释开源许可证 GPL、BSD、MIT、Mozilla、Apache和LGPL的区别? BSD开源协议BSD开源协议是一个给于使用者很大自由的协议。基本上使用者可以&…

    技术杂谈 2023年6月21日
    0109
  • 30道关于linux的基础命令小题,先练练手

    1.修改主机名为yuanlai0224命令是: 2.切换⽬录到/yuchao01/data/,再创建脚本/my_website/scripts/start.sh。 绝对路径、相对路…

    技术杂谈 2023年7月10日
    094
  • 【大话QT之十二】基于CTK Plugin Framework的插件版本号动态升级

    应用需求: 某些场景下我们可能面临这种问题,在执行着的应用程序不能终止的情况下,升级某个功能(或添,或减。或改动)。在不採用CTK Plugin Framework插件系统架构的情…

    技术杂谈 2023年5月30日
    0116
  • 什么是Servlet?

    Servlet 是sun 公司提供的一门用于开发动态web 资源的技术,是Java 语言中编写Web 服务器扩展功能的重要技术,同时它也是JSP 技术的底层运行基础。 Servle…

    技术杂谈 2023年5月31日
    097
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球