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)

大家都在看

  • java XML标记语言

    可扩展标记语言( Extensive Markup Language),标签中的元素名是可以自己随意写,可拓展是相对于html来说 标记语言:由一对尖括号括起来 用来当做配置文件 …

    技术杂谈 2023年6月21日
    097
  • python 格式化 小数

    python;gutter:true;</p> <blockquote> <blockquote> <blockquote> &lt…

    技术杂谈 2023年7月11日
    074
  • Aerospike AQL

    Aerospike AQL posted on2022-02-09 17:44 duanxz 阅读(48 ) 评论() 编辑 Original: https://www.cnblo…

    技术杂谈 2023年5月30日
    077
  • [转载]100大最佳古怪网站

    【网站名称】:眼睛的幻觉 【网站简介】:在这里你可以体验各种”空间频率扭曲”,实际上那只是”你的眼睛背叛了你的心”而已 【网站名称】…

    技术杂谈 2023年7月24日
    086
  • html大文件传输讨论

    需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在500M内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以501M来进行限制。 第一步: 前端修…

    技术杂谈 2023年5月30日
    085
  • nmap端口状态解析

    nmap端口状态解析 状态 说明 open 应用程序在该端口接收 TCP 连接或者 UDP 报文 closed 关闭的端口对于nmap也是可访问的, 它接收nmap探测报文并作出响…

    技术杂谈 2023年5月31日
    096
  • 014 Linux 线上高频使用以及面试高频问题——如何查找大文件并安全的清除?

    1 案例描述? 2 命令一(目录统计排序最佳命令) 3 命令二(最实用,目录和文件一起统计排序) (1)命令详情和说明 (2)du、head、sort、awk 详细说明参考已有文章…

    技术杂谈 2023年7月10日
    066
  • 函数式编程/lambda表达式入门

    函数式编程/lambda表达式入门 本篇主要讲解 lambda表达式的入门,涉及为什么使用函数式编程,以及jdk8提供的函数式接口 和 接口的默认方法 等等 1.什么是命令式编程 …

    技术杂谈 2023年7月11日
    074
  • 花一分钟来看看Worktile是如何为团队协作而生的

    团队协作,我们想的更深、更远、更多,花一分钟来看看我们特别奉献的故事,然后去注册一个账号,邀请小伙伴一起来工作,你会体会Worktile才是真正懂你的协作方式。 支持TerryLe…

    技术杂谈 2023年5月31日
    090
  • MYSQL如何在创建表时添加判断条件

    大家好,我是小皓。 一、背景 今天在博主练习MYS创建表操作时遇到一个语法报错,就想着来和大家分享一下MYSQL如何在创建表时添加判断条件: 上网一查才发现,原来是自己在代码中添加…

    技术杂谈 2023年7月11日
    0100
  • Maven中pom.xml的packaging类型

    项目的打包类型:pom、jar、war 项目中一般使用maven进行模块管理,每个模块下对应都有一个pom文件,pom文件中维护了各模块之间的依赖和继承关系。项目模块化可以将通用的…

    技术杂谈 2023年6月1日
    095
  • ThreadLocalRandom类原理分析

    public int nextInt(int bound) { if (bound > 31); else { for (int u = r; u – (r = u % bo…

    技术杂谈 2023年7月11日
    068
  • java反序列化cc_link_one2

    前言 这条链子其实是上一条链子的另一种走法,在调用危险函数哪里是没有什么变化的 整体链子 还是尾部没有变化嘛还是InvokerTransformer的transform方法可以执行…

    技术杂谈 2023年6月21日
    0117
  • [CentOS7]安装tomcat并开启自启动

    4、启动tomcat /usr/local/tomcat/bin/startup.sh 5、开放默认端口8080 firewall-cmd –zone=public –add-…

    技术杂谈 2023年6月1日
    086
  • 解决谷歌浏览器http链接自动跳转到https的问题

    原文:https://www.cnblogs.com/cnxkey/articles/13995953.html 有些网址http协议和https协议是两个服务,有时候需要访问ht…

    技术杂谈 2023年5月31日
    0213
  • lightdb关闭事务自动提交

    在lightdb/pg中,事务是自动提交的,也就是除非明确通过BEGIN;开启事务,否则任何语句都是独立事务。在ltsql客户端,可以通过\echo :AUTOCOMMIT查看自动…

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