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));
}
}
相关文章
- 从本体论开始说起——运营商关系图谱的构建及应用
- 如何成为一名数据科学家?
- 从未见过的堂兄杀了人,你的DNA是关键证据
- 20个安全可靠的免费数据源,各领域数据任你挑
- 20个安全可靠的免费数据源,各领域数据任你挑
- 阿里云李飞飞:All in Cloud时代,云原生数据库优势明显
- 基于Hadoop生态系统的一高性能数据存储格式CarbonData(性能篇)
- 大数据告诉你:10年漫威,到底有多少角色
- TigerGraph:实时图数据库助力金融风控升级
- Splunk利用Splunk Connected Experiences和Splunk Business Flow 扩大数据访问
- 大数据开发常见的9种数据分析手段
- 以免在景区看人,我爬了5W条全国景点门票数据...
- 【实战解析】基于HBase的大数据存储在京东的应用场景
- 数据科学家告诉你哪些计算机科学书籍是你应该看的
- Kafka作为大数据的核心技术,你了解多少?
- Spring Boot 整合 Redis 实现缓存操作
- 大数据学习必须掌握的五大核心技术有哪些?
- 基于Antlr在Apache Flink中实现监控规则DSL化的探索实践
- 甲骨文再次被Gartner评为分析型数据管理解决方案魔力象限领导者
- 爬取吴亦凡微博102118条转发数据,扒一扒流量的真假