JAVA使用位元組流與高速緩衝位元組流複製檔案對比
好記性不如賴筆頭……
/**
* @author Ckinghan
* @描述:使用位元組流複製檔案與使用高速緩衝流複製檔案的對比示例
* WebLogin.log 檔案大小:15,028,378 位元組(14.3M)
*/
package com.Ckinghan.outputStream;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
* @author Ckinghan
* @描述:使用位元組流複製檔案與使用高速緩衝流複製檔案的對比示例
* WebLogin.log 檔案大小:15,028,378 位元組(14.3M)
*/
public class InputStreamCopyCompared {
public static void main(String[] args) {
long startTime = System.currentTimeMillis();
//位元組流複製檔案,複製方式:一次讀取一個字元
stringFileCopy();
long endTime = System.currentTimeMillis();
System.out.println("位元組流複製檔案,複製方式:一次讀取一個字元耗時:"+(endTime-startTime)+"毫秒複製成功");
startTime = System.currentTimeMillis();
//使用高效緩衝區的位元組流讀取複製檔案,複製方式:一次複製一個字元
bufferedInputStreamReader();
endTime = System.currentTimeMillis();
System.out.println("使用高效緩衝區的位元組流讀取複製檔案,複製方式:一次複製一個字元耗時:"+(endTime-startTime)+"毫秒複製成功");
startTime = System.currentTimeMillis();
//用高效緩衝區的位元組流讀取複製檔案,複製方式:一次複製指定數量的位元組
FileCopy();
endTime = System.currentTimeMillis();
System.out.println("位元組流複製檔案,複製方式:一次複製指定數量的位元組耗時:"+(endTime-startTime)+"毫秒複製成功");
startTime = System.currentTimeMillis();
//用高效緩衝區的位元組流讀取複製檔案,複製方式:一次複製指定數量的位元組
bufferedInputStreamCopyFile();
endTime = System.currentTimeMillis();
System.out.println("用高效緩衝區的位元組流讀取複製檔案,複製方式:一次複製指定數量的位元組耗時:"+(endTime-startTime)+"毫秒複製成功");
}
/**
* @描述:位元組流複製檔案,複製方式:一次讀取一個字元
* @建立時間:
*/
public static void stringFileCopy(){
//建立位元組的輸出、輸出流
InputStream inputStream = null;
OutputStream outputStream = null;
try {
//例項化位元組輸入、輸出流
inputStream = new FileInputStream("E:/WebLogin.log");
outputStream = new FileOutputStream("E:/new3.log");
//建立讀取的位元組ACSII碼
int len = -1;
//迴圈讀取檔案資料
while ((len = inputStream.read()) != -1) {
//寫入檔案
outputStream.write(len);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
//如果輸出、輸入位元組流有建立,則關閉,注意關閉順序,先關輸出流再關輸入流
try {
if(outputStream != null)
outputStream.close();
if(inputStream != null)
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* @描述:位元組流複製檔案,複製方式:一次複製指定數量的位元組
* @建立時間:
*/
public static void FileCopy(){
//建立流物件
InputStream inputStream = null;
OutputStream stream = null;
try {
//例項化流物件
inputStream = new FileInputStream("E:/WebLogin.log");
stream = new FileOutputStream("E:/new2.log");
//接收讀取的位元組長度
int len = -1;
//接收讀取的位元組
byte[] bs = new byte[1024];
//迴圈讀取位元組
while((len = inputStream.read(bs)) != -1){
//將讀取的位元組寫入到檔案中
stream.write(bs, 0, len);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
//關閉輸出流
if(stream != null)
stream.close();
//關閉輸入流
if(inputStream != null)
inputStream.close();
} catch (IOException e2) {
e2.printStackTrace();
}
}
}
/**
* @描述:用高效緩衝區的位元組流讀取複製檔案,複製方式:一次複製指定數量的位元組
* @建立時間:
*/
public static void bufferedInputStreamCopyFile(){
//建立位元組流物件
InputStream inputStream = null;
OutputStream outputStream = null;
try {
//例項化高效緩衝區位元組流的輸入、輸出物件
inputStream = new BufferedInputStream(new FileInputStream("E:/WebLogin.log"));
outputStream = new BufferedOutputStream(new FileOutputStream("E:/new.log"));
//每次讀取的檔案位元組數量
int len = -1;
//每次讀取的檔案位元組資料
byte[] bs = new byte[1024];
//迴圈讀取檔案,直至讀到檔案末尾
while ((len = inputStream.read(bs)) != -1) {
//寫入到檔案
outputStream.write(bs, 0, len);
}
//清空緩衝區,將寫入到檔案中的資料儲存
outputStream.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
//關閉流
if(outputStream != null)
outputStream.close();
if(inputStream != null)
inputStream.close();
} catch (IOException e2) {
e2.printStackTrace();
}
}
}
/**
* @描述:使用高效緩衝區的位元組流讀取複製檔案,複製方式:一次複製一個字元
* @建立時間:
*/
public static void bufferedInputStreamReader(){
//建立位元組流物件
InputStream inputStream = null;
OutputStream outputStream = null;
try {
//例項化高效緩衝區位元組流的輸入、輸出物件
inputStream = new BufferedInputStream(new FileInputStream("E:/WebLogin.log"));
outputStream = new BufferedOutputStream(new FileOutputStream("E:/login.log"));
//讀取的位元組ACSII碼
int val = -1;
//迴圈讀取檔案,直至讀到檔案末尾
while((val = inputStream.read()) != -1){
//寫入到檔案
outputStream.write(val);
}
//清空緩衝區,將寫入到檔案中的資料儲存
outputStream.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
//關閉流
if(outputStream != null)
outputStream.close();
if(inputStream != null)
inputStream.close();
} catch (IOException e2) {
e2.printStackTrace();
}
}
}
}
執行結果:
位元組流複製檔案,複製方式:一次讀取一個字元耗時:38814毫秒複製成功
使用高效緩衝區的位元組流讀取複製檔案,複製方式:一次複製一個字元耗時:146毫秒複製成功
位元組流複製檔案,複製方式:一次複製指定數量的位元組耗時:72毫秒複製成功
用高效緩衝區的位元組流讀取複製檔案,複製方式:一次複製指定數量的位元組耗時:37毫秒複製成功
可以看出,使用了高速緩衝流複製檔案,所用時間比之未使用之前的相對較少,而且檔案越大,差距越大。
相關推薦
JAVA使用位元組流與高速緩衝位元組流複製檔案對比
好記性不如賴筆頭…… /** * @author Ckinghan * @描述:使用位元組流複製檔案與使用高速緩衝流複製檔案的對比示例 * WebLogin.log 檔案大小:15,028,378 位元組(14.3M) */ packag
Java——Properties集合,Object序列化流與反序列化流,打印流,commons-IO文件工具類
都是 oos times odi store buffer src object 所有 一、properties集合 集合對象Properties類,繼承Hashtable,實現Map接口,可以和IO對象結合使用,實現數據的持久存儲。 p { margin-bottom:
java ->IO流_序列化流與反序列化流
set final found class文件 ati 技術分享 保存到文件 back 序列化對象 序列化流與反序列化流 用於從流中讀取對象的操作流 ObjectInputStream 稱為 反序列化流 用於向流中寫入對象的操作流 ObjectOutputStream
java之IO流(序列化流與反序列化流)
一.物件序列化流ObjectOutputStream 用於向流中寫入物件的操作流 ObjectOutputStream 稱為 序列化流 ObjectOutputStream 將 Java 物件的基本資料型別和圖形寫入 OutputStream。可以使用 Object
IO流之字元流與字元緩衝流
在I/O類庫中,java.io.InputStream和java.io.OutputStream分別表示位元組輸入流和位元組輸出流,它們都是抽象類,不能例項化,資料流中的最小單位是位元組,所以叫做位元組流。 一、InputStream中的讀取資料的方法如下: 1 、int
標準文檔流與脫離文檔流
設置 ted left 位置 add html表格 單元 區域 部分 在網頁當中,所有的元素都有自己的占位。 標準文檔流指在沒有CSS幹預的前提下,塊級元素獨占一行,可以自行定義寬、高;而行內元素並排顯示,寬、高為auto。 常見的塊級元素有: <address>
IO流--序列化流與反序列化流
ng- 對象 style 完成 alt 完整 寫入 配置 let IO流--序列化流與反序列化流: 序列化流:把對象當做流一樣寫入到文本文件中 ObjectOutputSream(); 反序列化流:把文本文件中的流對象還原成對象ObjectInputSream
序列化流與反序列化流
序列化是把物件特性儲存到物理介質上,反序列化是把儲存在物理介質上的物件取出還原成物件。 能被序列化的物件所屬的類必須實現Serializable介面。 1、物件序列化流ObjectOutputStream 構造方法: ObjectOutputStream(OutputStream out):建立寫入指
序列化流與反序列化流,列印流,工具類commons-IO
1序列化流與反序列化流 用於從流中讀取物件的操作流 ObjectInputStream 稱為 反序列化流 用於向流中寫入物件的操作流 ObjectOutputStream 稱為 序列化流 特點:用於操作物件。可以將物件寫入到檔案中,也可以從檔案
Properties類、序列化流與反序列化流
Properties類 Properties類介紹 特點: 1、Hashtable的子類,map集合中的方法都可以用。 2、該集合沒有泛型。鍵值都是字串。 3、它是一個可以持久化的屬性集。鍵值可以儲存到集合中,也可以儲存到持久化的裝置(硬碟、U盤、光碟)上。鍵值的來源也可以是持久化的裝置。 4、有和流
字元流Writer、緩衝字元流BufferedWriter、FileWriter常用方法
一、字元流: 讀寫時都是以字元為單位進行的。 1:字元流的父類: 輸出流:Writer
java IO字元流與位元組流簡單使用示例
1.Reader && Writer Reader java.lang.Object |-- java.io.Reader//常用方法 |-- int read() //讀取單個字元 |--
JAVA 的輸入與輸出流當中,什麼時候該使用字元流?什麼時候該使用位元組流?
1. InputStream 和OutputStream,兩個是為位元組流設計的,主要用來處理位元組或二進位制物件, 2. Reader和 Writer.兩個是為字元流(一個字元佔兩個位元組)設計的,主要用來處理字元或字串. 字元流處理的單元為2個位元組的Unicode字元,分別操作字元、字元陣列或字串,而位
java 位元組流與字元流的區別 什麼是緩衝區
位元組流與和字元流的使用非常相似,兩者除了操作程式碼上的不同之外,是否還有其他的不同呢?實際上位元組流在操作時本身不會用到緩衝區(記憶體),是檔案本身直接操作的,而字元流在操作時使用了緩衝區,通過緩衝區再操作檔案,如圖所示。 下面以兩個寫檔案的操作為主進行比較,但是在操作時位元組流和字元流的
java流:字元緩衝流,裝飾設計模式,介面卡設計模式,位元組流
字元緩衝流之緩衝寫出流BufferedWriter package com.qianfeng.test; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; /*
JAVA高階基礎(31)---位元組緩衝流
位元組緩衝流 BufferredInputStream bos.flush();//將緩衝區強制重新整理 bos.close();//在關閉輸出流的時候,首先會執行 flush 將緩衝區的資料重新整理清空,然後再關閉流。 注意在使用緩衝輸出流的時候,必須進行強制
java第20天----字元緩衝流,位元組流,標準輸入流,裝飾設計模式,介面卡設計模式
昨天知識總結 1.流的基礎 2.流的分類 3.字元流 讀 FileReader 寫 FileWriter 4.File 流 字元緩衝流 字元緩衝流:又叫字元緩衝區,為了提高讀寫的能力,本身沒有讀寫的能力,要想進行讀寫,必須依靠字元流來實現。
Java之路:位元組流與字元流
儘管可以使用File進行檔案的操作,但是如果要進行檔案內容的操作,在Java之中就必須通過兩類流操作完成。 Java的流操作分為位元組流和字元流兩種。 字元流處理的物件單元是Unicode字元,每個Unicode字元佔據2個位元組,而位元組流輸入輸出的資料是以單個位元組(Byte
Java——I/O(位元組流、字元流與轉換流 )
位元組流和字元流 位元組流(byte):InputStream、OutputStream 字元流(char):Reader、Writer 位元組流與字元流的區別: 位元組流是原生的操作,而字元流是經過處理後的操作。 一般使用位元組流——無論是網路傳
Java 高階程式設計-IO位元組流與字元流
1. 簡介 2. 位元組輸出流OutputStream 3. 位元組輸入流InputStream 4. 字元輸出流Writer 5. 字元輸入流Reader 6. 位元組流與字元流的區別 7. 轉