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

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));

}

}

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

  1. 用户态与内核态 & 文件流与文件描述符 简介【转】

    转自:https://www.cnblogs.com/Jimmy1988/p/7479856.html 用户态和内核态 程序代码的依赖和调用关系如下图所示: Lib:标准ASCI C函数,几乎所有的平 ...

  2. 用户态与内核态 & 文件流与文件描述符 简介

    用户态和内核态 程序代码的依赖和调用关系如下图所示: Lib:标准ASCI C函数,几乎所有的平台都支持该库函数,因此依赖该库的程序可移植性好: System Function:系统调用函数,与系统内 ...

  3. C++学习47 文件的概念 文件流类与文件流对象 文件的打开与关闭

    迄今为止,我们讨论的输入输出是以系统指定的标准设备(输入设备为键盘,输出设备为显示器)为对象的.在实际应用中,常以磁盘文件作为对象.即从磁盘文件读取数据,将数据输出到磁盘文件.磁盘是计算机的外部存储器 ...

  4. [Java] 通过文件流拷贝文件

    package test.stream; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...

  5. c# 根据文件流查看文件真实格式

    今天在做图片注册的功能的时候,测试提出一个问题:将随便一个非图片文件将后缀名改为jpg或其他,上传时应检验图片合法性.然后同事给提供了根据文件流前两个字节判断文件真实格式的思路,代码如下: publi ...

  6. C#基础精华04(文件流,文件操作,File、Directory、Path,Directory)

    文件流 FileStream  可读可写  大文件  释放 StreamReader 读取   释放 StreamWriter 写入   释放 using 中释放 File 可读可写  小文件 操作文 ...

  7. springboot 头像上传 文件流保存 文件流返回浏览器查看 区分操作系统 windows 7 or linux

    //我的会员中心 头像上传接口 /*windows 调试*/ @Value("${appImg.location}") private String winPathPic; /*l ...

  8. C# 文件流FileStream 实现多媒体文件复制 StreamReader StreamWriter 读取写入文本

    #region 实现多媒体文件的复制 string source = @"F:\123\source.avi";//源文件路径 string target = @"F:\ ...

  9. 解压上传的zip文件流和文件

    /** * 解压上传的zip文件流 * @param stream * @param outputDirectory */ public static String unzip(InputStream ...

  10. Request中通过文件流获取文件

    第一次写博客,希望能帮到以后接触到这里的同学,废话不多说,面对疾风吧. /** * 获取文件相信信息 * @param request HttpServletRequest实例 * @param im ...

随机推荐

  1. 网线接口调试,Android ADB网络调试!

    ADB网络调试,网线接口调试    没有USB接口,照样可以调试,可通过网线接口调试步骤! 一.第一步连接WIFI  查看wifi 的IP  win+R 键 打开运行 ,输入cmd   二.输入ipc ...

  2. 技嘉b75m-d3v在nvme固态安装win7并且oem激活的实现过程

    本篇文章主要讲述了实现台式机主板oem激活win7以及旧平台主板使用nvme固态安装win7的过程 事情的起因是我去年在小黄鱼买了台戴尔n4110,今年买了台惠普银河舰队2代,并且把里面128GB的n ...

  3. vue高级进阶( 三 ) 组件高级用法及最佳实践

      vue高级进阶( 三 ) 组件高级用法及最佳实践 世界上有太多孤独的人害怕先踏出第一步. ---绿皮书 书接上回,上篇介绍了vue组件通信比较有代表性的几种方法,本篇主要讲述一下组件的高级用法和最 ...

  4. K8S中pod和container的资源管理:CPU和Memory

    K8S中创建pod时,可以显示地指明包含的container的资源需求(resouce request和resource limit),通常是CPU和Memory(RAM). kube-schedul ...

  5. CF1548B Integers Have Friends

    洛咕 题意: 给定 \(n\) 和一个长度为 \(n\) 的数组 \(a\),求一个最长的区间 \(\left[l,r\right]\),使得存在 \(m\geq 2\) 和 \(k\),对于所有 \ ...

  6. liunx部署flask项目

    如何在linux上部署flask项目 Python3.7 + virtualenv + uwsgi + git + mysql-5.6.45 + nginx 源码编译安装所需要的环境 yum inst ...

  7. shell特殊符号

    符号 含义 ; 命令分隔符 # 配置文件注释:  root用户命令终端提示符 ~ 家目录  cd ~ - 上一次所在路径 cd - su -    linux切换用户环境 ^ 非  [^abcd] $ ...

  8. Netty Reactor模型

    1.netty抽象出两个线程池:BossGroup负责监听和建立连接 :WorkerGroup 负责网络IO的读写 2.BossGroup 和 WorkerGroup 类型都是NioEventLoop ...

  9. JAI 多图片合成TIF格式

    因为项目需要,所以要做这么个工具类,发现了一些问题,接下来一一说明. 需要引入jai-codec-1.1.3.jar跟jai_code-1.1.3.jar. 1.判断图片格式: JPEG (jpg), ...

  10. 2357. 使数组中所有元素都等于零 (Easy)

    问题描述 2357. 使数组中所有元素都等于零 (Easy) 给你一个非负整数数组 nums .在一步操作中,你必须: 选出一个正整数 x , x 需要小于或等于 nums 中 最小 的 非零 元素. ...