三种读取文件的方式(inputStream,BufferedInputStream,FileChannel)
时间:2019-11-29
本文章向大家介绍三种读取文件的方式(inputStream,BufferedInputStream,FileChannel),主要包括三种读取文件的方式(inputStream,BufferedInputStream,FileChannel)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
package com.qzl.learn;
import javax.annotation.processing.SupportedSourceVersion;
import java.io.*;
import java.nio.channels.Channels;
import java.nio.channels.FileChannel;
import java.nio.channels.WritableByteChannel;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class IOTestMain {
public static void main (String s[]){
IOTestMain ioTestMain = new IOTestMain();
ioTestMain.readFileTest();
}
public void readFileTest(){
long time = System.currentTimeMillis();
File zipFile = new File("C:\\projects\\dbdatafile\\test.rar");
ZipOutputStream zipOutputStream = null;
FileOutputStream fileOutputStream = null;
InputStream inputStream = null;
///use buffer
BufferedInputStream bufferedInputStream = null;
BufferedOutputStream bufferedOutputStream = null;
//use file channel
FileChannel fileChannel = null;
WritableByteChannel writableByteChannel = null;
try{
fileOutputStream = new FileOutputStream(zipFile);
zipOutputStream = new ZipOutputStream(fileOutputStream);
for ( int i = 0;i<10;i++){
File in = new File("C:\\projects\\dbdatafile\\test.txt");
inputStream = new FileInputStream(in);
bufferedInputStream = new BufferedInputStream(inputStream);
zipOutputStream.putNextEntry(new ZipEntry("test"+i+".txt"));
bufferedOutputStream = new BufferedOutputStream(zipOutputStream);
fileChannel = ((FileInputStream) inputStream).getChannel();
writableByteChannel = Channels.newChannel(zipOutputStream);
int temp = 0;
//三种方式用一种就可以了
//第一种方式耗时间20+秒
while ((temp = inputStream.read())!= -1){
zipOutputStream.write(temp);
}
//第二种方式耗时间0.8+秒
while ((temp = bufferedInputStream.read())!= -1){
bufferedOutputStream.write(temp);
}
//第三种方式耗时间0.4+秒
fileChannel.transferTo(0,in.length(),writableByteChannel);
inputStream.close();
inputStream = null;
}
zipOutputStream.closeEntry();
zipOutputStream.finish();
}catch (Exception e){
System.out.println("1:"+e.getStackTrace());
}finally {
try{
if (fileOutputStream != null ){
fileOutputStream.close();
}
}catch (Exception e){
System.out.println("2:"+e.getStackTrace());
}
try{
if (zipOutputStream != null){
zipOutputStream.close();
}
}catch (Exception e){
System.out.println("3:"+e.getStackTrace());
}
try{
if (bufferedOutputStream != null){
bufferedOutputStream.close();
}
}catch (Exception e){
System.out.println("3.1:"+e.getStackTrace());
}
try{
if (writableByteChannel != null && writableByteChannel.isOpen()){
writableByteChannel.close();
}
}catch (Exception e){
System.out.println("3.2:"+e.getStackTrace());
}
try{
if (inputStream != null){
inputStream.close();
}
}catch (Exception e){
System.out.println("4:"+e.getStackTrace());
}
try{
if (bufferedInputStream != null){
bufferedInputStream.close();
}
}catch (Exception e){
System.out.println("5:"+e.getStackTrace());
}
try{
if (fileChannel != null && fileChannel.isOpen()){
fileChannel.close();
}
}catch (Exception e){
System.out.println("5:"+e.getStackTrace());
}
}
printTimeCost(time);
}
private void printTimeCost(long timestart){
long timeNow = System.currentTimeMillis();
System.out.println("cost Time is : " + (timeNow -timestart));
}
}
原文地址:https://www.cnblogs.com/thinkqin/p/11957720.html
- Express.js 4,Node.js,MongoDB REST API 简易教程
- 基于梯度下降算法求解线性回归
- 彩色图像高斯反向投影
- OpenCV中直方图反向投影算法详解与实现
- 基于一维级联快速膨胀与腐蚀算法
- mac下利用Breakpad的dump文件进行调试
- OpenCV3.2集成Android Studio2.2开发配置
- laravel中使用gulp打包发布前端部分
- Spring的编程式事务和声明式事务
- Java过滤器Filter的使用详解
- 基于积分图的二值图像膨胀算法实现
- Java监听器Listener的使用详解
- 图像各向异性滤波
- Python爬虫实战-抓取《盗墓笔记》所有章节及链接
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 键盘敲入 A 字母时,操作系统期间发生了什么...
- 类与对象」NSObject对象的分类
- 如何取SQL结果集的第一条记录
- postman的使用技巧
- Nodejs Serialport文档翻译
- Flask-Login文档翻译
- jsp作业——简单的试卷和自动打分
- ESP8266烧入nodemcu简易教程
- 搭建简易的物联网服务端和客户端-STM32(一)
- 搭建简易的物联网服务端和客户端-Nodejs_net(二)
- 搭建简易的物联网服务端和客户端-Nodejs_mysql(三)
- 搭建简易的物联网服务端和客户端-net+mysql(四)
- 搭建简易的物联网服务端和客户端-Nodejs_express服务(六)
- TF中Placement的最后一道防线——Placer
- 搭建简易的物联网服务端和客户端-ECharts数据显示(七)